zoukankan      html  css  js  c++  java
  • HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战

    HTTP转HTTPS—使用OpenSSL创建自签名SSL证书以及Tomcat配置SSL证书实战

    1 背景

    对于api服务器,我们不能让访问者先登录再进行访问这样不安全,也不友好。 http协议没有任何的加密以及身份验证的机制,即时是token认证,也非常容易遭遇窃听、劫持、篡改,因此会造成个人隐私泄露,恶意的流量劫持等严重的安全问题。

    1.1 https如何保证安全

    HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。它是一个URI scheme(抽象标识符体系),句法类同http:体系,用于安全的HTTP数据传输。https:URL表明它使用了HTTPS,但HTTPS存在不同于HTTP的默认端口及一个加密/身份验证层(在HTTP与TCP之间)。

    1.2 身份认证(CA数字证书)

    https协议中身份认证的部分是由数字证书来完成的,证书由公钥、证书主体、数字签名等内容组成,在客户端发起SSL请求后,服务端会将数字证书发给客户端,客户端会对证书进行验证,并获取用于秘钥交换的非对称密钥。 数字证书有两个作用:

    1)身份授权。确保浏览器访问的网站是经过CA验证的可信任的网站。 2)分发公钥。每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息传输给客户端。

    申请一个受信任的数字证书通常有如下流程:

    1)终端实体(可以是一个终端硬件或者网站)生成公私钥和证书请求。 2)RA(证书注册及审核机构)检查实体的合法性。如果个人或者小网站,这一步不是必须的。 3)CA(证书签发机构)签发证书,发送给申请者。 4)证书更新到repository(负责数字证书及CRL内容存储和分发),终端后续从repository更新证书,查询证书状态等。

    注册备案过的域名,可以供我们使用,申请SSL证书,需要SSL证书进行认证。SSL证书有很多途径都可以申请,比如国内的阿里云,腾讯云等都是比较方便的,而且还有免费的证书可以申请,都是一年的使用时间。本文中采用的是OpenSLL自签名创建SLL,毕竟是免费的。

    2 OpenSLL下载安装

    2.1 下载OpenSSL

    本次安装是在centos7上安装,首先下载OpenSSL,如果需要window版本(https://oomake.com/download/openssl),我这边下载了openssl-1.1.1d.tar.gz。

    2.2 安装OpenSSL

    由于我是window10系统,使用Xshell远程Linux系统,需要上传和下载文件,命令安装lrzsz

    # yum -y install lrzsz 

    安装完成后,可以开始使用 rz(上传)和 sz(下载)指令。

    #rz
    上传完成后即可依次执行以下指令安装了
    # tar -xzf openssl-1.1.1d.tar.gz
    
    # cd openssl-1.1.1d
    
    # mkdir /usr/local/openssl
    
    # ./config --prefix=/usr/local/openssl
    
    # make
    
    # make install

    这样就安装完成了,接下来一些辅助步骤。

    2.3 创建软连接

    # which openssl 
    /usr/bin/openssl
    为了使用方便,以及以后版本更新方便,可以创建软连接,如下:
    # ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
    此步骤可能会报异常,我就忽略了,如果您能明白,欢迎指导!!!

    2.4 执行以下命令

    # cd /usr/local/openssl
    
    # ldd /usr/local/openssl/bin/openssl
        linux-vdso.so.1 =>  (0x00007fff7b9e5000)
        libssl.so.1.1 => not found
        libcrypto.so.1.1 => not found
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f7faa7aa000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f7faa58e000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f7faa1c1000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f7faa9ae000)
        
    安装OK

    2.5 查看版本

    # openssl version
    OpenSSL 1.0.2k-fips  26 Jan 2017

    3 创建自签名的SSL证书和私钥

    3.1 生成私钥(key文件)

    # -genra    生成RSA私钥
    # -des3 des3算法
    # -out server.key 生成的私钥文件名
    # -2048 私钥长度
    
    #openssl genrsa -des3 -out server.pass.key 2048
    输入一个4位以上的密码。

    3.2 去除私钥中的密码

    # openssl rsa -in server.pass.key -out server.key

    注意:有密码的私钥是server.pass.key,没有密码的私钥是server.key 在第3.1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。所以要删除私钥中的密码。

    3.3 生成CSR(证书签名请求)

    # -req 生成证书签名请求
    # -new 新生成
    # -key 私钥文件
    # -out 生成的CSR文件
    # -subj 生成CSR证书的参数
    
    openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=Shanghai/L=Shanghai/O=cetc/OU=cetc/CN=gitlab.cetc.cn"

    subj参数说明如下:

    字段

    字段含义

    示例

    /C=

    Country 国家

    CN

    /ST=

    State or Province 省

    Shanghai

    /L=

    Location or City 城市

    Shanghai

    /O=

    Organization 组织或企业

    cetc

    /OU=

    Organization Unit 部门

    wlst

    /CN=

    Common Name 域名或IP

    wlst.com

    3.4 生成自签名SSL证书

    # -days 证书有效期
    
    #openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

    X.509证书包含三个文件:key,csr,crt。

    • key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
    • csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
    • crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有的公钥,以及签署者的签名等信息 备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。

    在这里插入图片描述

    4 将.key和.crt文件转换成.jks文件

    4.1 先使用openssl 工具 将 crt和key格式的证书转还成pfx:

     #openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

    其中:server.pfx (转后的pfx)mycert.key,mycert.crt( crt和key格式的证书)

    注意:该步骤需要输入密码passward,该密码2与3均需要用到

    4.2 查看证书别名

     #keytool -list -v -keystore server.pfx

    4.3 在使用jdk自带的keytool将pfx格式文件转为jks

    #keytool -importkeystore -srckeystore  server.pfx -srcstoretype pkcs12 -destkeystore mycert.jks -deststoretype JKS  -alias 1

    其中:-alias(设置别名) mycert.jks(转还后jks) server.pfx(需转还的pfx)

    注意:该步骤需要输入3次密码,均采用1中的passward。

    5 Tomcat配置SSL证书

    此处我的Tomcat安装在Windows10系统中;

    在Server中配置:

    • 声明开启HTTPS (SSL认证)
    • 声明侦听443端口(并确保已在防火墙上打开443端口)
    • 复制已签名的SSL证书和私钥到指定位置,并设置正确的文件权限
    • 配置已签名的SSL证书(mycert.jks)的位置
    • 配置将HTTP请求都重定向到HTTPS

    5.1 将证书mycert.jks拷贝到conf文件夹下。

    在这里插入图片描述

    5.2 配置server.xml文件,需要修改三个地方

    (1)把

    在这里插入图片描述

    改为:

    在这里插入图片描述

    其中第一个80端口是为HTTP(HyperText Transport Protocol)即超文本传输协议开放的,此为上网冲浪使用次数最多的协议,第二个443端口是SSL的专用端口;

    (2)把

    在这里插入图片描述

    改为:

    在这里插入图片描述

    使用443端口的理由同上;

    (3)把

    在这里插入图片描述

    改为:

    在这里插入图片描述

    首先去掉注释,然后certificateKeystoreFile属性是让你告诉服务器需要哪个SSL证书,后面就填复制过去的那个jks文件的名字(记得带上jks后缀),然后加上certificateKeystorePassword这个属性,后面的属性值是同第4步中的密码。(我全局都用一个密码,免得出错)

    这就配置完成server.xml啦。

    5.3 启动Tomcat

    到bin目录下,双击执行startup.bat

    6 在浏览器中访问

    在浏览器中打开https://localhost来访问。

    在这里插入图片描述

    在Firefox浏览器中可以添加Security Exception来忽略HTTPS错误警告。

    Chrome浏览器可以尝试通过导入CA证书的方式来忽略HTTPS错误警告。

    注意:Chrome浏览器可能有导入CA证书后仍然无法访问的问题;不同浏览器对自签名SSL证书的检查和限制也有所区别。

    注意

    自签名的SSL证书存在安全隐患,在生产环境上需要购买和使用经权威机构认证和办法的证书。

    参考文献 OpenSSL下载安装 使用OpenSSL生成自签名SSL证书 自签名证书生成过程 Tomcat安装SSL证书

    本文参与腾讯云自媒体分享计划,欢迎正在

  • 相关阅读:
    Yield Usage Understanding
    Deadclock on calling async methond
    How to generate file name according to datetime in bat command
    Run Unit API Testing Which Was Distributed To Multiple Test Agents
    druid的关键参数+数据库连接池运行原理
    修改idea打开新窗口的默认配置
    spring boot -thymeleaf-url
    @pathvariable和@RequestParam的区别
    spring boot -thymeleaf-域对象操作
    spring boot -thymeleaf-遍历list和map
  • 原文地址:https://www.cnblogs.com/bonelee/p/14805047.html
Copyright © 2011-2022 走看看