Wireshark TLS 解密与 Chrome 浏览器调试完整笔记

1. 核心原理:SSLKEYLOGFILE

通过设置环境变量 SSLKEYLOGFILE 或使用 Chrome 的 --ssl-keylog-file 启动参数,可以让浏览器将 TLS 会话的加密密钥写入一个指定的日志文件。Wireshark 读取这个文件后,就能解密抓取到的 HTTPS 流量,查看明文内容。

原理:TLS 加密通信使用双方协商的“会话密钥”。浏览器主动“导出”这个密钥,Wireshark 利用它解密数据包,无需服务器的私钥

2. 通用方法:环境变量配置(适用于 Chrome、Edge、Firefox)

2.1 准备密钥文件

任意位置创建一个空文本文件,用于保存密钥。例如:

  • Windows: C:\keylog.txt
  • macOS / Linux: ~/Desktop/keylog.txt

2.2 设置环境变量并启动浏览器

核心原则:必须先设置环境变量,再从同一个终端/命令行窗口启动浏览器。

操作系统浏览器命令
Windows (cmd)Chrome/Edgeset SSLKEYLOGFILE=C:\keylog.txt
"C:\Program Files\Google\Chrome\Application\chrome.exe"
Windows (cmd)Firefoxset SSLKEYLOGFILE=C:\keylog.txt
start firefox
macOS (终端)Chromeexport SSLKEYLOGFILE=$HOME/Desktop/keylog.txt
open -a "Google Chrome"
macOS (终端)Firefoxexport SSLKEYLOGFILE=$HOME/Desktop/keylog.txt
open -a Firefox
Linux (终端)Chromeexport SSLKEYLOGFILE=$HOME/Desktop/keylog.txt
google-chrome &
Linux (终端)Firefoxexport SSLKEYLOGFILE=$HOME/Desktop/keylog.txt
firefox

2.3 验证密钥是否成功导出

用文本编辑器打开密钥文件(如 C:\keylog.txt)。如果看到类似下面的内容,说明配置成功:

CLIENT_RANDOM 2C5A5B6F7E8F0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D2E3F4A5 5A5B5C5D5E5F5A5B5C5D5E5F5A5B5C5D5E5F5A
RSA 3C4A5B6C7D8E9F0A1B2C3D4E5F6A7B8C9D0E1F2A3B4C5D6E7F8A9B0C1D2E3F4A5B6 ...

3. Chrome 专属方法:--ssl-keylog-file 启动参数

这是 Chrome(及基于 Chromium 的浏览器)特有的方式,直接在启动命令中指定密钥文件路径,无需设置环境变量。

3.1 启动命令

操作系统命令
Windows"C:\Program Files\Google\Chrome\Application\chrome.exe" --ssl-keylog-file=C:\keylog.txt
macOS/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --ssl-keylog-file=$HOME/Desktop/keylog.txt
Linuxgoogle-chrome --ssl-keylog-file=$HOME/Desktop/keylog.txt

3.2 高级技巧

  • 使用临时用户配置目录:避免影响日常使用的浏览器配置(书签、历史记录、Cookie 等)

    chrome.exe --ssl-keylog-file=C:\keylog.txt --user-data-dir=C:\temp-chrome-profile
  • Windows 后台启动:添加 --no-first-run 参数可减少首次启动的提示框

3.3 注意事项

  • 启动前必须彻底关闭所有 Chrome 进程(包括后台的)
  • macOS/Linux 下关闭终端窗口可能会导致浏览器一并关闭,建议使用 &disown 命令
  • 浏览器顶部可能会出现“正在被自动化测试软件控制”的提示,这是正常现象

4. Firefox 专属方法:about:config 配置(无需环境变量)

从 Firefox 76 版本开始,支持在浏览器内部直接指定密钥文件路径。

  1. 地址栏访问 about:config,确认风险提示
  2. 搜索 sslkeylogfile
  3. 点击 + 添加新的字符串项
  4. 首选项名称:sslkeylogfile
  5. 首选项值:密钥文件的完整路径,例如 C:\keylog.txt/Users/用户名/Desktop/keylog.txt
  6. 重启 Firefox 浏览器

5. Wireshark 配置:指定密钥文件

无论使用哪种方法,Wireshark 端的配置都是一样的。

5.1 配置步骤

  1. 打开 Wireshark,开始抓包(或打开已保存的抓包文件)
  2. 菜单栏:编辑 (Edit) -> 首选项 (Preferences)
  3. 左侧协议列表:展开 Protocols,向下滚动并选择 TLS(旧版本可能叫 SSL)
  4. 在右侧找到 (Pre)-Master-Secret log filename 字段
  5. 点击“浏览”按钮,选择之前创建的密钥文件(如 C:\keylog.txt
  6. 点击 确定 (OK)

5.2 验证 Wireshark 解密是否生效

配置完成后,用配置好的浏览器访问任意 HTTPS 网站,在 Wireshark 中应该能看到:

  • HTTP/2 或 HTTP/1.1 请求/响应显示为明文
  • 数据包详情中可以看到解密后的内容(如 Host、User-Agent、请求路径等)

6. Wireshark TLS 重组选项详解

在 TLS 协议首选项中(与设置密钥文件的界面相同),有两个重要的重组选项,强烈建议保持默认开启

6.1 选项一:Reassemble TLS records spanning multiple TCP segments

属性说明
含义将一个被 TCP 协议拆分成多个 TCP 段发送的 TLS 记录,重新组装成一个完整的 TLS 记录
解决的问题TLS 记录 > TCP 数据包最大负载
不开启的后果看到散乱、无法解析的 TCP 数据块
开启后的效果看到完整的 TLS 记录(如一个完整的证书链)
比喻把被拆成多个包裹(TCP段)寄出的书(TLS记录),等所有包裹到齐后重新拼成完整的书

6.2 选项二:Reassemble TLS Application Data spanning multiple TLS records

属性说明
含义将一个被 TLS 协议拆分成多个 TLS 记录发送的应用数据,重新组装成完整的应用层数据
解决的问题大的应用数据(如 HTTP POST 请求、图片、视频流)> 单个 TLS 记录长度
不开启的后果看到多个独立的 Application Data 碎片,无法直接看到完整的 HTTP 请求/响应
开启后的效果看到完整的应用层 PDU(如一个完整的 HTTP 请求或响应报文)
比喻把被切分成多段、分别装进不同信封(TLS记录)寄出的长卷轴画(应用数据),按顺序拼成完整画卷

6.3 核心区别总结

选项重组层级解决的问题目的
records over TCP segments传输层 → 表示层TCP 分片正确解析 TLS 记录边界
App Data over TLS records表示层 → 应用层TLS 分块还原完整的应用层数据(如 HTTP)

6.4 实际使用建议

  • 保持默认开启(推荐):这两个选项在 Wireshark 中默认就是开启状态。对于绝大多数分析场景(浏览网页、查看 API 请求、调试应用),强烈建议保持开启。
  • 何时可能考虑关闭?

    • 调试性能问题:精确分析 TLS 记录和 TCP 段的对应关系
    • 分析非常规行为:当怀疑客户端或服务器在处理 TLS 分片/重组时存在 Bug

7. 常见问题与解决方法

问题解决方法
密钥文件为空彻底关闭所有浏览器进程(包括后台的),然后再用正确的方式重新启动
浏览器提示“正在被自动化测试软件控制”正常现象,不影响功能。可添加 --user-data-dir 使用临时目录减少提示
Wireshark 不解密1. 确认 Wireshark 中 TLS 协议设置的密钥文件路径正确
2. 确认抓包中包含完整的 TLS 握手过程(ClientHello、ServerHello 等)
3. 检查密钥文件是否包含新的密钥条目
4. 确认抓包是在配置完成后进行的
只想解密特定网站的流量无法筛选,浏览器会导出所有 HTTPS 会话的密钥。建议分析结束后删除密钥文件
与其他浏览器冲突每个浏览器的密钥导出需要独立配置,互不影响
macOS/Linux 关闭终端后浏览器退出使用 google-chrome --ssl-keylog-file=... & disown 使其后台运行

8. 方法对比与选择建议

方法优点缺点适用场景
环境变量通用,对 Chrome/Edge/Firefox 均有效操作稍繁琐,必须从终端启动浏览器需要同时调试多个浏览器
Chrome --ssl-keylog-file直接、明确,不受环境变量影响仅适用于 Chrome/Chromium 浏览器Chrome 浏览器专项调试
Firefox about:config设置后可双击图标直接启动,方便仅适用于 Firefox,配置入口隐蔽Firefox 浏览器专项调试
系统环境变量(全局)设置后双击图标即可生效影响所有浏览器实例,安全性较低频繁进行 TLS 解密调试

9. 安全提醒

  • 密钥文件等同于明文:任何能访问该文件的人,都可以用 Wireshark 解密你所有的 HTTPS 通信内容(包括密码、Token、隐私数据)。
  • 操作建议

    1. 调试完成后立即删除或清空密钥文件
    2. 避免在公共电脑或不信任的环境中使用此方法
    3. 可以使用 --user-data-dir 指定临时配置文件目录,避免影响个人浏览数据(如历史记录、Cookie、保存的密码)
    4. 调试完成后,建议同时清除浏览器的临时配置目录

笔记整理完毕,以上内容涵盖了本次对话的所有技术要点,可直接复制保存为 .md 文件。

标签: none

添加新评论