wireshark解密SSL/TLS数据有两种方法:
1.直接使用RSA私钥文件解密,这种方法有如下限制条件(官方翻译):
- Server端选择的算法不能是(EC)DHE
-
协议版本是SSLv3,(D)TLS 1.0-1.2,不支持 TLS 1.3
-
私钥必须和服务端证书配对,客户端私钥或者根证书私钥都不行
-
会话没有被恢复,握手过程必须包含ClientKeyExchange消息
2.使用pre-master-secret日志文件解密
源码编译后的wireshark 3.2.0版本没有看到RSA Keys 的选项,如果需要使用RSA私钥解密,可以使用3.0.2版本或者在windows上尝试,只需打开菜单项 Edit -> Preferences -> RSA Keys ,添加私钥文件即可。然后打开或者抓取满足上述要求的包,即可在Application Data消息中看到解密后的数据。
由于ubuntu上手动更新后的wireshark没有了RSA解密这一项,本次以pre-master-secret方法做个演示。为了简单获取pre-master-secret,本次用openssl 的s_server命令来测试,如下方式启动s_server和s_client:
openssl s_server -accept 9999 -verify 1 -cert Server.pem -key Server.key -keylogfile key.log
openssl s_client -connect 127.0.0.1:9999 -verify 1 -CAfile RootCA0.pem
将-keylogfile 参数指定的文件,配置到wireshark的Edit -> Preferences -> Protocols -> TLS,(Pre)-Master-Secret log中:
然后查看发送的数据,可以直接看到解密后的明文信息:
对于firefox和chrome,wireshark官方说明在系统上配置环境变量SSLKEYLOGFILE指定到某一个文件,然后打开浏览器便可以生成pre-master文件。
更详尽的内容,可以参考官方:
https://wiki.wireshark.org/TLS?action=show&redirect=SSL