一、利用openssl建立SSL测试环境
为了对SSL协议有大致的了解,我们可以通过openssl命令来建立一个SSL测试环境。
1. 建立自己的CA
在openssl安装目录的misc目录下(或者在apps目录下),运行脚本:./CA.sh -newca
(Windows环境下运行:perl ca.pl –newca
),出现提示符时,直接回车。运行完毕后会生成一个demonCA的目录,里面包含了ca证书及其私钥。
2. 生成客户端和服务端证书申请:
1 | openssl req -newkey rsa:1024 -out req1.pem -keyout sslclientkey.pem |
3. 签发客户端和服务端证书
1 | openssl ca -in req1.pem -out sslclientcert.pem |
4. 运行ssl服务端和客户端:
1 | openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 |
5. 运行客户端程序后,如果正确,会打印类似如下内容:
1 | SSL-Session: |
此时,输入数据然后回车,服务端会显示出来。
命令的其他选项:
- a) 验证客户端证书
1
2openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem - b) 指定加密套件其中AES256-SHA可用根据openssl ciphers命令获取,s_server也可用指明加密套件:
1
2openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -cipher AES256-SHA1
openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 1 -cipher AES256-SHA
- c) 指定私钥加密口令
1
2openssl s_server -cert sslservercert.pem -key sslserverkey.pem -CAfile demoCA/cacert.pem -ssl3 -Verify 3 -cipher AES256-SHA -pass pass:123456
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -pass pass:123456- 用参数pass给出私钥保护口令来源:比如:
1
2
3
4-pass file:1.txt (1.txt的内容为加密口令123456)
-pass env:envname (环境变量)
-pass fd:fdname
-pass stdin然后输入口令123456即可。1
openssl s_client -ssl3 -CAfile demoCA/cacert.pem -cert sslclientcert.pem -key sslclientkey.pem -pass stdin
- 用参数pass给出私钥保护口令来源:
二、Wireshark解密SSL流量
Wireshark 的抓包原理是直接读取并分析网卡数据,要想让它解密 HTTPS 流量,有两个办法:1)如果你拥有 HTTPS 网站的加密私钥,可以用来解密这个网站的加密流量;2)某些浏览器支持将 TLS 会话中使用的对称密钥保存在外部文件中,可供 Wireshark 加密使用。
1. RSA Private Key
- 从服务器上导出带私钥的P12格式的证书,或者直接导出服务器的私钥。
- 点击编辑——>首选项——>协议——>SSL(有的版本只有TLS),导入RSA key:
- 导入服务器证书:打开 Wireshark 的 SSL 协议设置,把 IP、端口、协议和证书私钥都配上(私钥必须存为 PEM 格式)
- 点击ok后,Wireshark会对捕获的报文进行解密:可以直观的看到HTTP报文的请求和响应。
2. SSLKEYLOGFILE
Firefox 和 Chrome 都会在系统环境变量存在 SSLKEYLOGFILE 文件路径时,将每个 HTTPS 连接产生的 Premaster Secret 或 Master Secret 存下来。有了这个文件,Wireshark 就可以轻松解密 HTTPS 流量,即使是使用了 ECDHE 这种具有前向安全性的密钥交换。SSLKEYLOGFILE 文件记录的是 HTTPS 数据传输中最重要的加密信息,如果不是出于调试目的,一般也没人会主动配置这个环境变量,所以这个方案基本不会对 HTTPS 安全性产生影响。
- 环境变量中新建用户变量SSLKEYLOGFILE=路径\sslkey.log文件,之后再wireshark中ssl配置中制定该文件位置即可。
- 点击编辑>首选项>protocol>ssl:在 Wireshark 的 SSL 配置面板的 「(Pre)-Master-Secret log filename」选项中这个文件选上,「SSL debug file」也建议配上,这样解密过程中的日志都会记录下来,便于调试。
- 设置完成后即可解密浏览器的访问流量。