通过Wireshark查看HTTPS、HTTP/2网络包(解码TLS、SSL)
目前越来越多的网站开始使用HTTPS/HTTP2,默认情况下通过Wireshark只能查看到加密后的TLS网络包。但是我们通过些设置,可以使用Wireshark解码TLS、SSL报文。
![](https://wx2.sinaimg.cn/large/005M94J9ly4fx7nmuff0hj30go081my1.jpg)
一、通过服务器私钥解码
如果我们拥有服务器的文件私玥,接下来我们可以通过Wireshark设置使用该私钥来解码对应网站的SSL\\TLS数据包。
1、在Wireshark中,进入 编辑(Edit) -> 首选项(Preferences)
2、展开 协议(protocols)-> TLS ,点击 RSA key lists 旁边的 编辑(Edit)
3、依次配置如下:
IP地址:填写对应服务器的IP,也可以使用any表示所有IP
端口(Port):服务器的HTTPS端口,一般为默认"443"
协议(Protocol):填写http
Key File:选择服务器证书私钥文件位置。
密码(Password): 如果是PFX格式证书,输入服务器私钥证书的密码。无密码可留空。
设置完成后,当前正在查看的网络包或将来抓取的网络包就会以设定的规则解码了。
不足:
如果网络包依然无法被解码,那么很有可能是因为服务器和客户端之间使用了Diffie-Hellman加密算法。可以通过查看SSL/TLS握手过程中发现服务器返回的Server Hello所选择的加密算法,如果带有 "ECDHE" 和 "DHE" 关键字,那就说明当前SSL Session使用了Diffie-Hellman加密算法。
可以通过禁用浏览器或者服务器上的TLS 加密套件算法解决,但不建议尝试。
二、用SSLKEYLOGFILE解码
设置环境变量 SSLKEYLOGFILE,将其指向一个可写入的文本文件。Chrome和Firefox在启动时会检查这个环境变量,如果存在的话,它会向指定的文件写入访问HTTPS站点时使用的密钥。我们可以在客户端配置Wireshark读取这个文件来解码TLS、 SSL网络包。
1、右键 计算机 - > 属性 -> 高级系统设置 -> 高级 -> 环境变量
2、新建环境变量,变量名称为 SSLKEYLOGFILE,变量值为一个可写入的文本文件 如 D:\\ssllog.txt 。文件夹必须提前创建,若文件尚未创建,可以打开Chrome或Firefox一下,文件会被自动创建。
3、在Wireshark中,进入 编辑(Edit) -> 首选项(Preferences)
4、展开 协议(protocols)-> TLS ,将 (Pre)-Master-Secret log filename 设为步骤2中指定的值。
点击确认后,就会正确解码HTTPS网络包了。使用 SSLKEYLOGFILE 的好处就是它可以解Diffie-Hellman加密算法。