sendmail 拒绝某些握手失败的连接:SSL 警报编号 40

sendmail 拒绝某些握手失败的连接:SSL 警报编号 40

我的 CentOS 5 上的 sendmail 服务器开始拒绝某些连接,并记录以下消息:

error:14094410:SSL routines:SSL3_READ_BYTES:sslv3 alert handshake failure:s3_pkt.c:1092:SSL alert number 40

当我尝试使用 CentOS 6 服务器的 openssl 连接它时出现以下错误:

$ openssl s_client -starttls smtp -crlf -connect hostname.example.net:smtp
(...)
error:14082174:SSL routines:SSL3_CHECK_CERT_AND_ALGORITHM:dh key too small:s3_clnt.c:3331
(...)
Server Temp Key: DH, 512 bits
(...)

CentOS 6 服务器上的邮件暂时被拒绝Deferred: 403 4.7.0 TLS handshake failed

如何才能从 CentOS 6 / RHEL 6 发送邮件到 CentOS6 / RHEL5 服务器?

答案1

这是因为在 CentOS 6 上对 openssl 进行最新更新后,openssl-1.0.1e-30.el6.11.x86_64使用此库的程序开始拒绝连接到易受攻击的服务器僵局TLS 漏洞。

您需要将 sendmail 配置为使用更强大的临时 Diffie–Hellman 密钥 — 至少 1024 位。它与您在 TLS 证书中使用的密钥不同,因此如果您的证书使用 2048 位密钥,那么您仍然可能受到攻击。

在你的服务器上生成 DH 参数文件:

openssl dhparam -out /etc/pki/tls/certs/dhparams.pem 1024

配置 sendmail 以使用此参数文件,并且仅使用强密码。添加到/etc/mail/sendmail.mc

LOCAL_CONFIG
O CipherList=HIGH:!ADH
O DHParameters=/etc/pki/tls/certs/dhparams.pem
O ServerSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3 +SSL_OP_CIPHER_SERVER_PREFERENCE
O ClientSSLOptions=+SSL_OP_NO_SSLv2 +SSL_OP_NO_SSLv3

然后使用make -C /etc/mail/service sendmail restart

答案2

是的,它有效:-)

我的错误略有不同,但解决方案相同:

SSL routines:SSL3_READ_BYTES:sslv3 alert illegal parameter:s3_pkt.c:1060:SSL alert number 47

我生成服务器临时密钥:DH文件(我的配置中没有,默认是512位)

openssl dhparam -out /etc/mail/certs/dhparams.pem 2048

(花费很长很长时间;-)

我将行放入 sendmail.cf

O DHParameters=/etc/mail/certs/dhparams.pem

重启后我的 sendmail 又开始发送邮件了:-)

相关内容