您如何使用私钥解密 ssl 数据包(流量)?我试图用 ssldump 和 openssl 做到这一点,但没有任何效果。
当我拥有私钥时,如何使用数据包嗅探器解密 SSL 流量?
Ssldump应该可以做到,但它似乎没有维护(在最新版本的源存档中,所有文件的最后修改日期都在 2002 年或更早)所以它很可能不会支持较新的 SSL/TLS;实际上,2002 年的软件能够处理 TLS 1.2 (AES/GCM) 中定义的新加密格式是非常难以置信的。TLS 1.1于 2006 年发布,TLS 1.2于 2008 年发布。
OpenSSL 是一个实现该协议的库,但不适用于分析记录的会话。
使用Wireshark可能会有更好的机会,它有足够的文档说明如何使用它来解密记录的会话。
需要记住一个重要参数:只有在密钥交换类型为 RSA 或静态 DH 的情况下,被动记录的会话(使用服务器私钥的副本)才能解密;使用“DHE”和“ECDHE”密码套件,即使知道服务器私钥,您也无法解密这样的会话。在这种情况下,您将需要协商的“主密钥”,或者使用服务器私钥来主动拦截连接(在中间人设置中)。
如果您有权访问进行连接的客户端并且浏览器是 Firefox(或者,我相信,基于 NSS),您可以转储为任何站点建立的临时密钥。为此运行:
$ export SSLKEYLOGFILE=/path/to/logfile.log
$ firefox
您会发现logfile.log
包含一系列与以下内容类似的行- 您可以在此处CLIENT_RANDOM <hex>
找到这些文档。
然后在wireshark中,您可以转到Edit | Preferences | Protocols | SSL
并将“pre-master-secret logfile name”设置为您在上面设置的文件。
无论主机如何,通过您的 Firefox 浏览会话的所有连接都将被解密并可见。
需要注意的是,您可能不一定会再看到易于理解的 http。我刚刚对 google.com 进行了尝试,现在显然正在使用 http/2。
我在这里假设您有一个启用 ssl 的服务和您自己的私钥,并希望查看未加密的会话 - 一个非常有用的示例是在实践中查看 http/2,因为它很少在没有 tls 的情况下部署(大多数浏览器不会通过 http 使用它)并且想知道为什么在现代设置中不能。正如汤姆所说,问题在于您需要临时密钥。
您可以使用 tshark(基于终端的 wireshark)尝试以下命令来解密实时会话:
tshark -o "ssl.desegment_ssl_records: TRUE" -o "ssl.desegment_ssl_application_data: TRUE" -o "ssl.keys_list:,443,http,./private_key.pem" -o "ssl.debug_file:rsa_private.log" -R "(tcp.port eq 443)" port 443
请注意,这不会解密应用程序数据。