退信提示 TLS negotiation failed 怎么排查?TLS 1.0/1.1 停用的影响?

退信提示 TLS negotiation failed 怎么排查?TLS 1.0/1.1 停用的影响?
背景:IETF 于 2021 年正式废弃 TLS 1.0(1999 年发布)和 TLS 1.1(2006 年发布),发布 RFC 8996 要求所有实现移除对两者的支持。当前邮件生态中,主流邮件服务均已关闭 TLS 1.0/1.1,仅接受 TLS 1.2 及以上。如果你的邮件系统仍在使用旧的 TLS 库(例如 OpenSSL <1.1.1),发往这些域时将出现 TLS 协商失败。
诊断方法:
① 手动测试 TLS 连接:openssl s_client -connect mx.receiver.com:25 -starttls smtp -tls1_2
② 如果上述命令成功但实际发信失败 → 可能是证书链问题(中间证书缺失)。检查:openssl s_client -showcerts -connect ...
③ 检查双方支持的密码套件:openssl s_client -cipher 'ECDHE+AESGCM' -connect ...
④ 查看邮件日志中的具体 TLS 错误——grep "TLS" /var/log/mail.log | tail -20
修复方案:
(1) 升级 OpenSSL 到 ≥1.1.1(支持 TLS 1.3),并配置 Postfix:
# /etc/postfix/main.cf
smtpd_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3, !TLSv1, !TLSv1.1
(2) 在 Dovecot 中同理设置 ssl_min_protocol = TLSv1.2
(3) 如果是与特定收件域的协商失败且对方确实只支持低版本 TLS,考虑通过邮件中继(邮件系统)转发——但这是临时方案,应推动对方升级。

📎 RFC 8996 废除 TLS 1.0/1.1;RFC 8446 TLS 1.3;RFC 8314 邮件 TLS 最佳实践