![如何记录 tls 加密的 smtp 流量?](https://linux22.com/image/593589/%E5%A6%82%E4%BD%95%E8%AE%B0%E5%BD%95%20tls%20%E5%8A%A0%E5%AF%86%E7%9A%84%20smtp%20%E6%B5%81%E9%87%8F%EF%BC%9F.png)
我想知道我的本地 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_client
s_server