使用Wireshark解密SSL/TLS数据
我们使用wireshark抓取的HTTPS数据包,可以使用wireshark通过以下两种方式直接解密查看
1. 用服务器证书私钥解码
第一种方法是:使用服务器证书的私钥进行解码。
在IIS上导出服务器证书私钥
第一步我们需要从网站服务器上导出证书私钥,这里拿IIS服务器举例。
- 打开IIS站点所绑定的服务器证书,点击查看 详细信息 页,点击 复制到文件。
- 向导中点击下一步,当询问是否导出私钥时选择 是,导出私钥,点击 下一步 继续。
- 选择 个人信息交换(.PFX),下面的三个复选框不用勾选,点击 下一步 继续。
- 勾选 密码,设置一个密码,点击 下一步 继续,导出PFX文件。
Wireshark中设置以服务器证书私钥解码SSL协议
有了PFX私钥文件,接下来就可以通过Wireshark设置使用该私钥来解码SSL、TLS网络包了。这一步既可以在服务器上的Wireshark中设置,也可以在客户端的Wireshark中设置,取决于你想在哪一端查看(抓取)网络包。
- 在Wireshark中,进入菜单 Edit -> Preferences…。
- 展开 Protocols -> SSL,点击 Edit 按钮编辑 RSA key lists。
- 配置如下:
IP address:目标服务器的IP地址,也可以填写 “any” 应用到所有IP地址。
Port:HTTPS端口号,一般均为:“443”。
Protocol:填写 “http”。
Key File:选取刚才导出的服务器证书私钥(PFX文件)。
Password:输入服务器证书私钥的密码。
设置完成后,当前正在查看的网络包或将来抓取的网络包就会以设定的规则解码了。
如果网络包依然无法被解码,那么很有可能是因为服务器和客户端之间使用了Diffie-Hellman加密算法。比如使用ECDHE,这种数据包无法使用wireshark解密。
2. 用SSLKEYLOGFILE解码
第二种解码TLS、SSL的方法是:设置环境变量 SSLKEYLOGFILE,将其指向一个可写入的文本文件。Chrome和Firefox在启动时会检查这个环境变量,如果存在的话,它会向指定的文件写入访问HTTPS站点时使用的**。我们可以在客户端配置Wireshark读取这个文件来解码TLS、 SSL网络包。
- 右键计算机,查看属性,打开高级系统设置,查看高级选项卡,点击环境变量。
- 新建一个系统变量。
- 指定变量名为:SSLKEYLOGFILE,变量值为一个可写入的文本文件。文件夹必须提前创建,若文件尚未创建,可以打开Chrome或Firefox一下,文件会被自动创建。
- 在Wireshark中,进入菜单 Edit -> Preferences…。
- 展开 Protocols -> SSL,将 (Pre)-Master-Secret log filename 设为步骤3中指定的值。
- 点击确认后,就会正确解码HTTPS网络包了。使用 SSLKEYLOGFILE 的好处就是它可以解Diffie-Hellman加密算法。
使用Wireshark调试SSL/TLS解密数据
导出SSL/TLS**
- 点击wireshark如下配置,导出SSL会话**
- 导出的文件如下所示
上图中的“Master-Key”为主**,主**并不是最终加解密使用的**,会话**是通过主**再进一步计算获得。
导出wireshark调试日志
- 在wireshark中设置调试日志保存的位置,如下图所示
- 设置如上配置后,点击OK后,数据包会重新在加载,然后就可以打开上图中保存的日志文件,下边截取部分日志查看
日志中输出了客户端和服务端在协商阶段,计算**过程的中间输出,比如“预主**”、“主**”、客户端和服务端随机数等。
参考资料
https://www.joji.me/zh-cn/blog/walkthrough-decrypt-ssl-tls-traffic-https-and-http2-in-wireshark/#md-sslkeylogfile