Linux 技术手札

CentOS + Postfix 问题: tls early post process client hello:unsupported protocol

早几天新安装一台 Mail Gateway 主机, 是在 CentOS 8 里面用 Postfix, 中继送信, 然后再加安装 Let’Encrypt 对 smtpd 加密。

这个过程还算顺利, 测试后用 gmail 及 yahoo 发信过来也收到,

过两天后收到客户反映, 有其中一个寄件者发来的邮件收不到, 查看 /var/log/maillog 后, 找到以下错误:

mx01 postfix/smtpd[108550]: warning: TLS library problem: error:14209102:SSL routines:tls_early_post_process_client_hello:unsupported protocol:ssl/statem/statem_srvr.c:1661:
mx01 postfix/smtpd[108550]: lost connection after STARTTLS from unknown[xxx.xxx.xxx.xxx]
mx01 postfix/smtpd[108550]: disconnect from unknown[xxx.xxx.xxx.xxx] ehlo=1 starttls=0/1 commands=1/2

CheckTLS 再三检查还是正常, 而且设定跟另一台安装在 CentOS 7 的 Mail Gateway 都是一样的。

在网上好像都没找到解决方法, 再从上面报错看看, 其中 “unsupported protocol” 表示不支援通讯协定。然后再在 /var/log/maillog 检视成功连连的 TLS 连线, 发现全部都是 TLSv1.2 及 TLSv1.3.

然后再 google 找找, RHEL 8 / CentOS 8 的 openssl 只支援 TLS 1.2 及 TLS 1.3, 但还有很多老旧的电邮伺服还是用 TLS 1.0 或 TLS 1.1, 所以便有这个问题出现。

解决方法是开启 /etc/crypto-policies/back-ends/opensslcnf.config:

# vi /etc/crypto-policies/back-ends/opensslcnf.config

可以看到 MinProtocol 及 MaxProtocol 两个设定, 这是默认值:

可以看到 MinProtocol 设定了最低支援的版本是 TLS 1.2, 将 MinProtocol 改成 TLSv1 便可, 即改成这样:

储存盘案后便会生效, 再等一段时间后, 用 grep 指令检视 /var/log/maillog 再没有以上报错, 问题便解决了。

Exit mobile version