HTTPS通信流程环节如下
握手阶段
建立HTTPS连接的第一步是握手(handshake)阶段。该阶段的目的是确定连接参数(如加密算法、加密密钥等)以及验证证书有效性。握手的过程可以分为以下四个步骤:
- 客户端向服务器发送一个ClientHello消息,包含有加密算法、TLS版本、支持的扩展协议等信息。
- 服务器收到ClientHello消息后,发送一个ServerHello消息,包含有选择的加密算法、TLS版本、支持的扩展协议等信息。
- 服务器向客户端发送一个数字证书,该证书包含有服务器的公钥和证书签名。客户端使用其保存的可信根证书机构的公钥,对证书签名进行验证。
- 如果证书验证通过,则客户端和服务器都使用协商的加密密钥进行HTTPS通信。如果验证失败,则HTTPS连接不会建立。
加密通信阶段
在握手阶段完成后,就可以使用协商的加密密钥对HTTP消息进行加密。客户端通过加密密钥对HTTP请求进行加密,服务器则使用相同的加密密钥进行解密。然后,服务器使用加密密钥对HTTP响应进行加密,客户端则使用相同的加密密钥进行解密。
连接关闭阶段
当HTTPS通信完成后,需要关闭连接以保护数据。客户端和服务器都可以通过发送一些指定的消息来关闭连接。在关闭连接之前,如果需要建立另一个HTTPS会话,则需要重新启动到握手阶段。
以上是HTTPS通信流程环节的概述。在实践中,HTTPS的具体实现可能会更加复杂。例如,可以使用HTTP长连接、缓存、预连接等技术来优化HTTPS连接。
生成HTTPS证书基本流程
申请证书
首先需要找到信任的证书授权机构(CA)申请证书,如Symantec、Comodo、DigiCert等。在已有证书的网站中,可以通过浏览器的地址栏点击锁头或其他证书信息来查看证书授权机构。
生成私钥和证书签名请求
一旦选择了CA,就需要生成私钥和证书签名请求(CSR)。私钥是一个非常重要的文件,它用于加密和解密HTTPS数据流,通常会被保存在保险箱中。CSR是一份必须由Web服务器管理员生成的文件,其中包含有关Web服务器的信息,例如域名、公司名称和地址等。
许多Web服务器提供程序可以帮助生成CSR,通常可以在服务器上运行openssl命令或使用Web管理界面。openssl是一个可免费下载的开源软件,可以用于生成各种加密密钥、证书签名请求等。
命令示例:openssl req -new -newkey rsa:2048 -nodes -keyout example.com.key -out example.com.csr
将CSR提交给证书授权机构(CA)
将CSR提交给CA,以便他们可以根据请求生成数字证书。通常来说,需要在CA的网站上填写一份申请表,然后上传CSR文件。
CA验证和颁发证书
CA会对CSR文件和申请表进行验证,以确保请求人确实代表所述的机构和域名。一旦验证通过,CA会生成一个数字证书,并将其发送给请求人。证书包含公共密钥等信息。
证书颁发后,可以在Web服务器上安装数字证书,并为网站启用HTTPS。
证书安装
将数字证书安装到Web服务器上。每个Web服务器都有自己的安装步骤和证书格式,需要查找相应的文档。通常,将数字证书复制到指定目录,然后更新HTTPS配置即可。现在,用户访问该网站时,将看到浏览器地址栏左侧的锁图标,表示使用了加密连接。
这就是生成HTTPS证书的流程。需要注意的是,在证书过期之前,需要定期更新证书。
测试环境生成HTTPS根证书及通讯证书步骤
生成根证书
首先,需要生成一个自签名的根证书。这个根证书用于建立本地HTTPS信任链。可以使用openssl生成根证书。
生成根证书的步骤如下:
1)在系统中打开openssl命令行界面。
2)执行下面的命令:
openssl genrsa -out rootCA.key 2048
3)使用私钥生成CA的CSR文件:
openssl req -new -key rootCA.key -out rootCA.csr
在执行以上命令时,需要输入一些与证书相关的信息,例如证书的common name,即证书的标识和认证信息。
4)为CA自签名,生成自签名证书:
openssl x509 -req -extensions v3_ca -in rootCA.csr -signkey rootCA.key -out rootCA.crt -days 10000
在执行以上命令时,也需要输入一些与证书相关的信息,例如证书的版本号、证书的扩展信息等。
完成以上步骤后,就成功生成了根证书,可以将rootCA.crt证书安装在需要连接的客户端上。
生成通讯证书
为了建立基于HTTPS的安全通讯,需要生成一对公私钥,并使用根证书对通讯证书进行签名。
生成通讯证书的步骤如下:
1)在系统中打开openssl命令行界面。
2)执行下面的命令,生成私钥:
openssl genrsa -out communication.key 2048
3)使用CSR文件生成证书,将证书和私钥打包成一个PKCS12格式的文件:
openssl req -new -key communication.key -out communication.csr
openssl x509 -req -in communication.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out communication.crt -days 365
openssl pkcs12 -export -inkey communication.key -in communication.crt -out communication.p12
在执行以上命令时,需要输入一些与证书相关的信息,例如证书的common name,即证书的标识和认证信息。
4)将生成的communication.p12证书安装到Web服务器上。
安装完通讯证书后,需要在Web服务器的配置文件中添加SSL证书配置,让Web服务器使用HTTPS协议。
通过以上步骤,就成功生成了HTTPS根证书和通讯证书,并使用通讯证书建立了HTTPS连接。
测试环境下使用国密算法生成HTTPS根证书和通讯证书
生成国密根证书
首先,需要生成一个自签名的根证书。可以使用国密算法的sm2和sm3算法生成。
生成根证书的步骤如下:
1)生成私钥:
openssl ecparam -genkey -name SM2 -text -out rootCA.key
2)生成CSR文件:
openssl req -new -config openssl.cnf -key rootCA.key -out rootCA.csr
在执行以上命令时,需要填写一些基本信息,如国家、省份、城市、组织、单位名称等。
3)为自己的CA签名:
openssl ca -selfsign -in rootCA.csr -text -config openssl.cnf
-keyfile rootCA.key -out rootCA.crt -extensions v3_ca -startdate 000101000000Z -enddate 50223142359Z -batch
在上述命令中,使用了openssl.cnf配置文件,需要预先设置参数,如证书过期时间等。
生成国密通讯证书
生成通讯证书的步骤与生成根证书的步骤类似,也是使用sm2和sm3算法生成,流程如下:
1)生成私钥:
openssl ecparam -genkey -name SM2 -text -out communication.key
2)生成CSR文件:
openssl req -new -key communication.key -out communication.csr
在执行以上命令时,需要填写一些基本信息,如国家、省份、城市、组织、单位名称等。
3)使用根证书签名:
openssl ca -in communication.csr -cert rootCA.crt -keyfile rootCA.key -out communication.crt -batch
4)将生成的communication.crt和communication.key证书安装到Web服务器上。
完成以上步骤后,就成功生成了HTTPS国密根证书和通讯证书,并使用通讯证书建立了HTTPS连接。
升级OpenSSL 支持国密
要升级OpenSSL以支持国密算法,需要执行以下步骤:
- 下载国密补丁
首先,需要下载适用于OpenSSL的国密补丁。常用的补丁是GMSSL补丁,可以从官方网站或GitHub上下载。下载适合系统的版本,如适合Linux的版本或Windows的版本等。
- 安装国密补丁
将下载的国密补丁解压后,需进入源代码目录。在终端中输入以下命令:
./config #配置文件
make && make install #编译安装
安装完成后,可以使用命令openssl version,查看当前openssl版本是否已经支持国密算法。
- 测试国密算法
在使用之前,需要检查国密算法是否已经被正确支持。通过以下命令检查是否支持国密:
openssl ecparam -list_curves|grep sm2 #检查是否支持sm2算法
openssl dgst -sm3 file.txt #使用sm3算法摘要文件
如果输出结果包含有sm2和sm3,就表示OpenSSL已经支持了国密算法,可以开始使用了。
通过以上步骤,就可以升级OpenSSL版本,使其支持国密算法。在升级之前,需要备份原有的OpenSSL版本以防止出现问题。
生成证书工具
- JDK自带工具keyTool:https://www.yuque.com/u1198581/dlb2a2/qxvzmq
- openSSL
- KeyStore Explorer:https://keystore-explorer.org/