
我有一个 pcap 跟踪文件和私有 RSA 密钥,它们应该允许我解密 pcap 文件中的 HTTPS 数据。
使用完全相同的 pcap 文件、私钥和 tshark 命令,我发现在 Oracle Linux 6 中解密失败,但在 Ubuntu 18 和 RHEL 8 中解密成功。
我想知道环境/版本的哪些差异导致解密在较新的操作系统上成功但在较旧的操作系统上失败。
tshark 命令如下(此处简化了IP、私钥路径和pcap名称):
tshark -V -n -o ssl.keys_list:1.2.3.4,443,http,/path/to/key.pem -o ssl.desegment_ssl_records:TRUE -o ssl.desegment_ssl_application_data:TRUE -o ssl.debug_file:rsa_private.log -r ./trace.pcap
客户端问候TLS 信息(在 RHEL8 上看到):
TLS 1.2 (0x0303)
Extension: renegotiation_info (len=1)
Extension: server_name (len=24)
Extension: extended_master_secret (len=0)
Extension: signature_algorithms (len=20)
Extension: ec_point_formats (len=2)
Extension: supported_groups (len=8)
服务器问候TLS 信息(在 RHEL8 上看到):
Version: TLS 1.2 (0x0303)
Cipher Suite: TLS_RSA_WITH_AES_128_CBC_SHA (0x002f)
Extension: renegotiation_info (len=1)
Extension: server_name (len=0)
Extension: extended_master_secret (len=0)
在我的rsa_private.log
日志中我发现旧操作系统上有以下错误消息:
ssl_decrypt_record found padding 111 final len -48
ssl_decrypt_record wrong record len/padding outlen 96
ssl_decrypt_record: mac failed
不同环境的版本信息:
Oracle Linux 6(解密失败):
- TShark 1.8.10
- GLib 2.28.8
- GnuTLS 2.12.23
- Gcrypt 1.4.5
- Linux 4.1.12-124.30.1.el6uek.x86_64
- libpcap 版本 1.4.0
Ubuntu 18(解密成功):
- TShark(Wireshark)2.6.10
- GLib 2.56.4
- GnuTLS 3.5.18
- Gcrypt 1.8.1
- Linux 4.18.0-22-通用
- libpcap 版本 1.8.1
RHEL8(解密成功):
- TShark(Wireshark)2.6.2
- GLib 2.56.1
- GnuTLS 3.6.4
- Gcrypt 1.8.3
- Linux 4.18.0-80.4.2.el8_0.x86_64
- libpcap 版本 1.9.0-PRE-GIT
我推测 libcrypt/openssl/gcrypt 中添加了某些内容,使得较新的操作系统能够成功解密我的流量,但我想知道是什么?
我发现使用相同 TLS 版本和密码套件的其他流量在旧操作系统中解密得很好。
编辑:添加有关 OL6 与 RHEL8 中的 TLS 扩展可见性的详细信息:
OL6 显示扩展如下(在两个 Hello 中):
Extension: Extended Master Secret
Type: Extended Master Secret (0x0017)
Length: 0
RHEL8 显示扩展如下(在两个 Hello 中):
Extension: extended_master_secret (len=0)
Type: extended_master_secret (23)
Length: 0