如何在数据包捕获中解密通过 SMTP 进行的 STARTTLS 通信(如果我有私钥)?

如何在数据包捕获中解密通过 SMTP 进行的 STARTTLS 通信(如果我有私钥)?

为了进行故障排除,我需要查看电子邮件通过 SMTP 发送到我的 sendmail 服务器时的样子。上游服务器需要 SMTP 连接才能使用 STARTTLS,因此数据包捕获仅显示加密数据。

有没有办法使用 wireshark 解密传输并查看?当然,假设我有 sendmail 服务器上使用的私钥?

我看到网上有几种引用RSA key listswireshark 功能的程序(例如:https://support.citrix.com/article/CTX116557)但是这对我来说似乎仍然不起作用。

这与前向保密有关吗?我能不在较新的协议/密码上这样做吗?

答案1

仅当进行 RSA 密钥交换时,了解 RSA 私钥才足够。现代系统改用 Diffie Helmann 密钥交换(DHE*、ECDHE* 密码)来提供前向保密性。在这种情况下,私钥仅用于验证服务器,而不用于密钥交换,因此了解私钥无助于获取加密密钥。

相反,SSL预主秘密因为这将用于导出加密密钥。虽然某些浏览器支持在某些特殊调试模式下导出此机密,但其他客户端通常不支持。

至于您的具体问题,我宁愿尝试中间人“攻击”,即使客户端收到的是加密流量,也会以明文形式记录所有流量。这类似于 HTTPS 的中间人代理,只是它支持初始明文连接,并理解 STARTTLS 升级到 TLS。通过快速搜索,我发现starttls-mitm然后sslsplit对此有一些测试支持。当然,客户端需要连接到中间人代理并信任它获得的证书,这可能是原始服务器证书,因为您似乎可以访问它。

另一个选择是在特定的 MTA 中启用调试,以防这为您的特定问题提供足够详细的信息。

答案2

可能是 wireshark SMTP 协议解析器不知道如何处理 TLS/SSL。但也许你可以改用 HTTP 协议解析器。转到 edit->preferences->protocols->HTTP 并将端口添加到 SSL/TLS 端口

相关内容