我正在尝试获取可以解密客户端和 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
知道我做错了什么吗?
答案1
如何使用 SSL3 与服务器通信?
不要。不要更改协议(或使用旧的 OpenSSL),这会改变安全性。完美前向保密是一项功能。
相反,使用客户端或服务器上的会话密钥日志记录. 将环境变量设置SSLKEYLOGFILE
为跟踪文件。一些客户端支持此功能,特别是浏览器、NSS 和库。 然后将 Wireshark 指向它:编辑 > 首选项,协议 > SSL > (Pre)-Master-Secret 日志文件名。
编辑:TLS 解密的另一个参考是2018 年 SharkFest ASIA 的 SSL/TLS 解密演示。它指出不能仅使用 RSA 私钥解密 ECDHE。提醒一下,TLS 1.3 将全部为 PFS。它还描述了更多 SSL 密钥记录实现的状态,特别是 OpenSSL 和派生类,它们允许应用程序调用,SSLCTXsetkeylogcallback()
而 NSS 和 GnuTLS 具有SSLKEYLOGFILE
环境变量。
因此,对于静态链接的 OpenSSL,您可以让开发人员使用不同的 TLS 库,或者实现自己的带日志记录的回调函数,或者您挖出调试器自己提取。请注意,如果动态链接,则切换正在使用的 libssl(并更新它)会更容易。
替代方案包括像在代理上一样尽早终止 TLS 并捕获未加密的数据包,或者删除 PFS 并使用私钥解密。
答案2
您可能尝试与之通信的服务器不支持 SSL v3。2019 年任何配置良好的服务器都不会使用 SSL v3,而 SSL/TLS 要求两端都设置兼容的密码才能与给定的密码进行通信。
禁用此类旧密码的原因正是为了阻止恶意行为者执行您想要做的事情。
恐怕你需要找到其他方式来转储你的有效载荷。