Wireshark TLS 解密:用会话密钥分析获准流量
Wireshark 可以借助 TLS 会话密钥解析获准采集的加密流量。本文介绍 SSLKEYLOGFILE、TLS 偏好设置、重组与显示过滤器,并说明密钥日志、私钥方法和嵌入式 pcapng 文件的安全边界。
TLS 解密需要秘密材料
TLS 通过加密、完整性校验和身份认证保护两端通信。Wireshark 能解析握手与公开元数据,但要查看应用数据,必须获得适用密钥。常见方式包括客户端为单次会话导出的 key log、少数旧式 RSA 密钥交换的服务器私钥,以及特定协议使用的预共享密钥。会话密钥日志适用面更广,也能处理使用 (EC)DHE 的连接;RSA 私钥不能解密 TLS 1.3,也不能解密使用临时 Diffie–Hellman 密钥交换的现代连接。
为受控客户端记录会话密钥
Firefox、Chrome、curl 等应用在底层 TLS 库支持时,可通过 SSLKEYLOGFILE 环境变量写出本次进程所用会话秘密。仅在授权测试客户端启动时设置该变量,并把密钥文件放入权限受限、自动清理的临时目录。不要在整台机器永久设置全局变量:它可能记录浏览器所有站点的会话秘密。
- 完全退出将要测试的浏览器,再为单独启动的进程设置临时 SSLKEYLOGFILE。
- 启动浏览器并只访问获准的测试目标。
- 在 Wireshark 中打开捕获文件,进入 Preferences → Protocols → TLS,将 (Pre)-Master-Secret log filename 指向密钥日志。
- 确认 TCP stream reassembly 等必要重组选项开启,然后查看 TLS 记录是否解密。
密钥日志中包含能够解密捕获会话的秘密。测试结束后停止记录,限制文件访问并安全删除;如果密钥已误上传或进入备份,应按密钥泄露流程处理。不得将会话密钥随抓包发送给没有获准的接收者。
显示过滤器与故障定位
可先用 tls 显示过滤器查看 TLS 包,捕获时 Wireshark 无法仅凭尚未解析的加密内容按应用协议筛选;如果已知端口,则用类似 tcp port 443 的捕获过滤器缩小范围。解密成功且协议可识别后,再尝试按 HTTP 或 HTTP/2 过滤。
若没有明文,逐项检查客户端是否支持 key logging、变量是否在启动浏览器前设置、日志文件是否可写、Wireshark 路径是否正确、握手包是否完整以及重组是否启用。调试日志可能包含解密内容和所用密钥,排错后同样要限制与清除。
导出会话密钥与 pcapng 风险
Wireshark 可导出 TLS Session Keys。自 Wireshark 4.2 起,对话框导出的秘密只包含当前数据包中实际引用的密钥。Wireshark 3.0 起,TLS key log 也可以嵌入 pcapng 的 Decryption Secrets Block,使接收者更方便复现解密;这意味着 pcapng 文件本身成为可读明文的敏感材料。分享前确认授权范围,必要时不嵌入秘密,而是另行加密并分通道传递。
PSK 长期不变时,使用它的历史与未来会话可能都可被解密。采用最小范围会话密钥、短期保留和访问审计,比长期保存服务器私钥或全局 key log 更安全。

来源:Wireshark Wiki: TLS。页面未列个人作者。











暂无评论内容