阅读本文前,请先阅读 使用 RSA 密钥交换方式时,使用私钥解密 HTTPS 流量数据


1. 概述

以下内容来自于 https://firefox-source-docs.mozilla.org/security/nss/legacy/key_log_format/index.html

外部应用程序可以通过 Key Log 解密 TLS 连接。Wireshark 1.6.0 及以上版本可以使用该日志文件解密数据包。通过 Wireshark -> Preferences -> Protocols -> TLS -> (Pre)-Master-Secret log file,告诉 Wireshark 去哪里寻找 Key 文件。

通过将环境变量 SSLKEYLOGFILE 设置为文件的方式,启用 Key Log。Key Log 文件由一系列行组成。注释行以 # 开头,注释将被忽略。密钥遵循格式 <Label> <space> <ClientRandom> <space> <Secret>,其中:

Label 的定义如下:

RSA 形式允许记录使用 RSA 密钥协商的密码套件,并且这是 Wireshark 1.6.0 支持的第一个形式。它已被 CLIENT_RANDOM 取代,后者可以与其它密钥协商算法(例如基于 Diffie-Hellman 的算法)一起使用,从 Wireshark 1.8.0 起,被支持。

在 TLS 1.3 中,十六进制编码的密钥大小取决于选择的密码套件。对于 SHA256、SHA384、SHA512 分别为 64、96、128 字符。


2. 通过 Nginx 进行测试

2.1. Nginx 版本及编译配置参数

2.2. 安装 sslkeylog

2.3. Nginx 配置文件

/etc/nginx/nginx.conf:

2.4. 启动 Nginx

2.5. 启动 tcpdump

2.6. 发送 HTTPS 请求

2.7. 停止 tcpdump,将 test.pcap 和 /tmp/sslkey.log 拷贝到本机

2.8. 使用 Wireshark 解密