如何记录 tls 加密的 smtp 流量?

如何记录 tls 加密的 smtp 流量?

我想知道我的本地 postfix 在 STARTTLS 之后对 Amazon SES smtpd 说了什么。以纯文本形式,这样我就能理解。Amazon SES 需要 TLS,所以我无法暂时关闭它。

我目前用这个技巧记录了两条线路的交通:

mkfifo proxypipe
cat proxypipe | nc -l 11111 | tee -a inflow | nc email-smtp.us-east-1.amazonaws.com smtp | tee -a outflow 1>proxypipe

然后我让 postfix 对话 localhost:11111 而不是 email-smtp.us-east-1.amazonaws.com:25。只要他们以明文交谈,这就会生成一份不错的记录。当然,一旦出现 STARTTLS,所有内容都会变成乱码。

有什么技巧可以让我通过 openssl 路由此问题,或者使用 openssl 或类似的东西进行后期处理,以弄清楚他们到底说了什么?谷歌搜索没有找到任何答案。

答案1

不要费心嗅探网络连接;正如@voretaq7 解释的那样,你做不到。相反,让 postfix 记录连接通过将远程 SMTP 服务器的 IP 地址添加到debug_peer_list

如果这还不足以让你了解发生了什么,你可以设置smtp_tls_loglevel 4获得所有通过网络传输的信息的完整转储。

完成后,请务必将配置改回来。您不会希望调试持续的时间超过绝对必要的时间。

答案2

请允许我重新表述一下你的问题:

我想在 TLS 加密连接中间插入一些东西来显示正在发送的明文。

。。。现在就不太安全了,不是吗?我的意思是 TLS 的重点是阻止你正在尝试做的事情!-- 所以不,您所要求的是不可能的,也远达不到任何理智管理员想要的日志记录级别。
您只需要知道您连接到了谁(远程系统)、您告诉了他们什么(从 A 到 B 的邮件)以及他们说了什么(OK、延期、拒绝)。


如果您真的想窃听 TLS 连接,您必须欺骗您的服务器连接到提供虚假 SSL 证书(您有该证书的密钥)的代理,然后代理可以解密数据(并记录它),然后重新加密它以转发到 Amazon 的真实服务器。您可以使用 OpenSSL和子系统
来构建这样一个怪物,但实现这样一个怪物就留给读者练习了。s_clients_server

相关内容