首页/网络/抓包与流量分析速查/Wireshark 解密 TLS 流量
Wireshark 技巧75 条

Wireshark 解密 TLS 流量

配置 SSLKEYLOGFILE 环境变量让浏览器/客户端导出会话密钥,Wireshark 在 TLS 协议首选项里指定该文件即可解密 HTTPS 流量(仅限自己可控的客户端)。

解密 TLS 流量在做什么

解密 HTTPS 不需要私钥,而是让客户端自己把会话密钥导出到文件,分析工具再读取该文件还原明文。支持导出密钥的客户端包括主流浏览器与部分开发库:设置环境变量指向日志文件,复现访问后,在首选项里把该文件配置为密钥日志,重新打开抓包文件就能看到明文的应用层内容。它只对导出密钥的那一台客户端有效,服务端与其他客户端的流量无法用这种方式解密。

基本信息

原理客户端导出会话密钥,分析工具据此还原明文
前提条件客户端支持密钥日志导出,且流量由该客户端发起
关键配置环境变量指向日志文件,工具首选项里指定该文件
适用范围仅本机受控客户端的流量
敏感性密钥日志等同于解密能力,属敏感资料

典型使用场景

  • 排查前端与接口的交互问题:看到明文请求与响应内容
  • 核对字段是否真正发出:确认请求体与请求头内容
  • 分析压缩与分块问题:解密后才能看到传输编码细节
  • 验证接口返回结构:直接读响应体而不依赖业务日志
  • 教学与取证:在受控环境下演示加密流量内容

操作路径

操作路径
# 1) 设置密钥日志环境变量(以 Linux 桌面与常用浏览器为例)
export SSLKEYLOGFILE=/tmp/sslkeys.log
# 2) 启动浏览器并复现访问
google-chrome --user-data-dir=/tmp/profile &   # 该进程会继承上面的环境变量
# 3) 在分析工具里指定密钥日志文件:首选项 → 协议 → TLS → 密钥日志文件名
# 4) 重新打开抓包文件,明文的应用层内容即可显示

常见限制与说明

限制表现说明
仅限导出密钥的客户端其他客户端仍是密文服务端流量无法用这种方式解密
部分运行环境不支持导出日志文件始终为空旧版本运行环境或特定实现可能不提供该能力
新版本协议报文加密可见消息很少握手的大部分消息在加密记录中,属正常现象
密钥日志被清理重新分析时无法解密日志文件删除后明文无法还原
多客户端混抓只能解开其中一部分需要按客户端分别导出密钥
解密能力来自密钥日志文件本身。分析完成后应及时清理这些文件,并在需要长期保存抓包文件的场合评估是否需要同时脱敏。
解密他人流量、或在未授权环境中导出会话密钥,可能涉及合规风险。仅在自有或明确授权的环境里使用这种方法,并在结论中说明数据来源。

验证是否生效

验证是否生效
tls.handshake.type == 1              # 解密前后都能看到的客户端问候
http.request                         # 出现该字段说明解密成功
tls.app_data                         # 解密后应用数据记录可被解析

判读要点

  • 配置后仍看不到明文,先确认抓包时间是否在设置环境变量之后
  • 只有部分会话能解密,通常是导出密钥的客户端与抓包客户端不是同一个
  • 新版本协议下加密握手是设计使然,可见消息少不代表解密失败
  • 用浏览器开发者工具能看到的请求,在解密视图里应能一一对应,两者可交叉验证

易错点

  • 忘记先设置环境变量就复现访问,密钥日志为空导致无法解密
  • 把密钥日志文件删掉后再分析旧抓包,明文无法恢复,需要重新抓取
  • 以为可以解密任意客户端流量,实际只对导出密钥的那一台有效
  • 在未授权环境使用该能力,存在合规与隐私风险
  • 只配置工具不重启客户端,客户端未继承环境变量导致日志始终为空

数据来源与参考

  • Wireshark Wiki(TLS Decryption)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌