openssl生成自签名证书

http://slproweb.com/products/Win32OpenSSL.html
首先需要下载openssl,可以直接下载编译好的文件(或者自己编译)。

安装完整后在将安装目录的路径\OpenSSL-Win64\bin加入到系统环境变量中。然后需要在生成证书的目标路径中创建一个demoCA子文件夹,在demoCA子文件夹中需要创建一个index.txt,index.txt.attr,serial文件,serial文件的内容需要改为01即可。

生成CA证书

运行命令生成CA证书和私钥(密码自定义:123456),期间会让输入一些生成证书的基本信息。

openssl req -new -x509 -keyout ca.key -out ca.crt -config ../ssl/openssl.cnf

生成服务器证书和服务器私钥

  • 首先生成服务器私钥,密码自定义:123456
openssl genrsa -des3 -out server.key 1024
  • 接着生成证书签名请求文件
    这个过程需要输入一些证书的信息,其中Common name为服务器的域名/ip,如果需要进行测试则此项必须输入正确。
openssl req -new -key server.key -out server.csr 

生成客户端证书和客户端私钥的过程类似

  • 最后就是通过最开始生成的CA证书和CA私钥对此服务端/客户端证书签名请求文件进行签名,最终生成服务端/客户端证书
openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key
openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

运行此命令后一路y就可以生成最终经过CA证书签名的服务端证书(此服务端证书就是服务器需要发送给客户端的证书,其中包含了服务器的公钥)

将服务端私钥文件格式转变为pkcs12格式

如果需要在wireshark中对https流量数据进行解密的话,就需要导入服务端的私钥文件(pkcs12格式)。

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

测试发现对于TLS1.2而言这种方法是可以解密https流量的,wireshark会根据此服务端私钥计算出会话对称加密密钥,然后进一步对会话数据进行解密。但是有个局限性就是对于服务端使用RSA密钥协商算法而言wireshark可以通过服务端的私钥计算出会话密钥,而对于DH密钥协商算法而言,服务端私钥并不用于生成会话对称密钥,会话对称密钥是由服务端与客户端生成的一系列随机数内部计算出来的,所以wireshark这时即使导入服务端私钥也无法解密会话密钥。因为TLS1.3已经不支持RSA密钥协商算法了,所以对于TLS1.3而言导入服务端私钥是无法得到会话密钥并解密https流量的。
参考:
https://www.jianshu.com/p/af8cc2db51f4
http://mowblog.com/wireshark解密tls数据流/
https://blog.csdn.net/ljttianqin/article/details/73016014

posted @ 2022-11-11 15:36  怎么可以吃突突  阅读(807)  评论(0编辑  收藏  举报