wireshark解密TLS数据流

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据