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 開始再次發送郵件:-)

相關內容