有时候需要对网络层数据进行抓包,但现几乎主流的网站都是 HTTPS 的,使用 Wireshark 进行抓包时,只能看到 TLS 协议的数据包,由于 TLS 在数据传输过程中使用会话密钥对 Application Data 数据进行加密,因此在 Wireshark 看到的只有密文,无法看到 HTTP 的数据报文。
Wireshark 支持 SSLKEYLOGFILE 环境变量指定的文件作为 Pre-Master-Secret log file。设置 SSLKEYLOGFILE 的环境变量后 Chrome / Firefox 在访问 HTTPS 网站时,会将会话密钥存储在该环境变量的指定文件中。
为了让 macOS 的 Chrome / Firefox 若要使用环境变量设置需要通过 bash 脚本启动:
#!/bin/bash
export SSLKEYLOGFILE=/tmp/keylog.log
open -n /Applications/Google\ Chrome.app
Wireshark 在 Preferences » Protocols » TLS 的 (Pre)-Master-Secret log filename 中指定该文件即可: