我正在尝试使用 wireshark 在数据包捕获中解码 ssl 数据包。当服务器在 TLS 握手期间选择的密码是 TLS_RSA_WITH_AES_256_CBC_SHA256 时,我能够使用服务器密钥成功解码数据包。我只需在 edit->preferences->Protocols->ssl 中提及服务器 ip/port/protocol(http)/server.key。但是当使用的密码是 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 时,它不起作用,我使用的是 Wireshark 版本 2.0.2。还有其他解码方法吗?
答案1
你的问题的答案是
不,因为 ECDHE_RSA。
现在让我们看看为什么会这样。让我们看看整个密码套件规范TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256详细地:
- TLS——协议
- ECDHE_RSA - 身份验证和密钥交换算法
- WITH_AES_128 - 加密/解密算法
- GCM - 用于对数据进行加扰的模式,以便可以安全地与算法一起使用
- SHA256——消息认证码算法
密钥交换算法指定如何交换批量加密/解密密码的密钥。Diffie-Hellman 密钥交换在ECDHE_RSA中使用:
DHE_RSA 提供了一种称为完美前向保密的技术,这个夸张的名称代表了以下属性:如果您的服务器被彻底黑客入侵,以至于攻击者获得服务器私钥的副本,那么如果这些会话使用了 RSA,那么他还将能够解密过去的 TLS 会话(他记录下来的),但如果这些会话使用了 DHE_RSA,那么他将无法这样做。
换句话说,使用 (EC)DHE,无法从 TLS 密文对话中检索用于加密和解密的 AES 密钥,即使你有服务器的私钥也不行。
这与仅依靠 RSA 进行密钥交换的情况不同:在此操作模式下,要使用的批量密码密钥由客户端生成,使用服务器的公钥进行 RSA 加密并发送到服务器。如果窃听的第三方拥有服务器的私钥,它只需解密密钥交换的 RSA 密文,获取批量密码密钥并解密其他所有内容。这正是 Wireshark 在为您解码 TLS 流时所做的。
因此,适用于基于 RSA 的密钥交换的方法,对于基于 DHE 的密钥交换却不起作用。