我正在尝试获取可以为客户端和 ALB 之间的请求解密的 Wireshark 跟踪。为了解密交易,我需要强制客户端/服务器禁用 PFC(完美前向保密)。我可以访问服务器私钥。
当我这样做时:
openssl s_client -connect server:443 -debug -msg -state -cipher AES128-SHA
有用。
但是,当我这样做时:
openssl s_client -connect keystone-ext.develop.zillow.net:443 -debug -msg -state -cipher AES128-SHA -ssl3
它失败。输出如下:
SSL3 alert read:fatal:handshake failure SSL_connect:failed in SSLv3
read server hello A 31996:error:14094410:SSL
routines:SSL3_READ_BYTES:sslv3 alert handshake
failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:1145:SSL
alert number 40 31996:error:1409E0E5:SSL routines:SSL3_WRITE_BYTES:ssl
handshake
failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-64.50.7/src/ssl/s3_pkt.c:566:
我在用:
$ openssl version OpenSSL 0.9.8zh 14 Jan 2016
知道我做错了什么吗?
您可能尝试与之通信的服务器不执行 SSL v3。2019 年任何配置得当的服务器都不会使用 SSL v3,并且 SSL/TLS 需要在两端设置兼容的密码才能与给定密码进行通信。
像这样的旧密码被禁用的原因正是为了阻止邪恶的演员做你想做的事情。
恐怕您需要找到其他方式来转储您的有效载荷。
不。不要更改协议(或使用旧的 OpenSSL),这会改变安全性。完美的前向保密是一项功能。
相反,在客户端或服务器上使用会话密钥日志记录。将环境变量设置
SSLKEYLOGFILE
为跟踪文件。这得到了一些客户端的支持,特别是浏览器、NSS 和libcurl。然后将 Wireshark 指向它:Edit > Preferences, Protocols > SSL > (Pre)-Master-Secret 日志文件名。编辑:TLS 解密的另一个参考是来自 SharkFest ASIA 2018 的 SSL/TLS 解密演示。它指出 ECDHE 不能仅使用 RSA 私钥解密。提醒一下,TLS 1.3 将是所有 PFS。它还描述了 SSL 密钥记录的更多实现的状态,特别是 OpenSSL 和派生类允许应用程序调用
SSLCTXsetkeylogcallback()
,而 NSS 和 GnuTLS 具有SSLKEYLOGFILE
环境变量。因此,对于静态链接的 OpenSSL,您可以让开发人员使用不同的 TLS 库,或者实现他们自己的带有日志记录的回调函数,或者您自己挖掘调试器来提取它。请注意,如果动态链接,则切换正在使用的 libssl(并更新它)会更容易。
替代方案包括提前终止 TLS,如在代理上并捕获未加密的数据包,或删除 PFS 并使用私钥解密。