1. 设置环境变量
macOS / Linux:
bash
export SSLKEYLOGFILE="$HOME/sslkeylog.log"
Windows (PowerShell):
powershell
$env:SSLKEYLOGFILE = "$env:USERPROFILE\sslkeylog.log"
Windows (CMD):
powershell
set SSLKEYLOGFILE=%USERPROFILE%\sslkeylog.log
设置后,Chrome / Firefox / curl 等程序在建立 TLS 连接时,会自动将会话密钥追加写入该文件。
2. 流量触发
在设置了 SSLKEYLOGFILE 的同一终端中发起请求:
bash
curl -v <https://www.example.com>
或者打开 Chrome 浏览器访问目标 HTTPS 网站(需在同一终端中启动 Chrome)。
macOS 从终端启动 Chrome:
bash
open -a "Google Chrome" <https://www.example.com>
或者直接打开浏览器 App 进行页面访问
3. 抓包说明
3.1 Tcpdump
bash
# 抓取所有 HTTPS 流量(端口 443),保存到 capture.pcap
sudo tcpdump -i any -w capture.pcap port 443
# 只抓特定网卡(如 en0),加 -s0 抓完整报文
sudo tcpdump -i en0 -s0 -w capture.pcap port 443
# 只抓特定主机
sudo tcpdump -i any -s0 -w capture.pcap host www.example.com and port 443
| 参数 | 含义 |
|---|---|
| -i any | 监听所有网卡 |
| -i en0 | 指定网卡(ifconfig 查看) |
| -s0 | 抓取完整报文(不截断) |
| -w capture.pcap | 写入文件 |
| port 443 | 只抓 HTTPS |
| host x.x.x.x | 只抓特定 IP |
抓完后按 Ctrl + C 停止。
确认两个文件都已生成:
bash
ls -la capture.pcap # 抓包文件
ls -la ~/sslkeylog.log # 密钥文件
3.2 Wireshark
- 下载:
https://www.wireshark.org/ - macOS 也可以通过 Homebrew:
brew install --cask wireshark
启动 Wireshark → 双击要监听的网卡(如 en0 / Wi-Fi)。
在抓包页面上方的过滤器输入框中填入:tcp port 443
然后点击左上角「鲨鱼鳍」图标开始抓包,点击红色方块停止抓包。
4. 导出抓包文件
4.1 从 tcpdump 导出
tcpdump 抓包时已用 -w 直接写入 .pcap 文件,直接使用即可。
4.2 从 Wireshark 导出
- 菜单栏:
File→Save As... - 格式选择:
Wireshark/tcpdump/... - pcapng(默认) - 可勾选 Displayed 只导出当前显示的数据包(过滤后导出更小体积)
4.3 从远程服务器下载
如果在服务器上用 tcpdump 抓包:
bash
# SCP 下载到本地
scp user@server:/path/to/capture.pcap /Users/zuoxuchen/Desktop/File/
scp user@server:/path/to/sslkeylog.log /Users/zuoxuchen/Desktop/File/
5. 在Wireshark中配置解密文件
双击 capture.pcap 用 Wireshark 打开,或在 Wireshark 中 File → Open。
- 菜单栏:
Edit→Preferences(或快捷键 ⌘,) - 左侧展开:
Protocols→ 找到TLS(或直接搜索 TLS) - 在右侧找到
(Pre)-Master-Secret log filename - 点击
Browse,选择之前生成的sslkeylog.log文件 - 点击
OK保存
配置完成后,Wireshark 会立即重新解析报文:
- 已解密的 HTTPS 报文会显示完整的 HTTP 请求/响应内容
- 在报文详情中可看到 Decrypted TLS 标签
- 可直接查看 HTTP Header、Body 等明文数据
在 Wireshark 过滤器栏输入: http ,如果能看到 HTTP 请求和响应,说明解密成功。