Mysql

Dovecot 握手失敗,Postfix 成功

  • February 1, 2014

我正在嘗試設置 Dovecot/Postfix 結構,依賴於 MySQL 後端。我遇到了 SSL 配置的問題,這真的讓我毛骨悚然……

情況

Dovecot 偵聽埠 993 (IMAP) 和 995 (POP3)。我使用以下命令來測試連接:

openssl s_client -connect myserver.tld:993
openssl s_client -connect myserver.tld:995

發生以下錯誤:

error:14077410:SSL routines:SSL23_GET_SERVER_HELLO:sslv3 alert handshake failure

我做了同樣的測試,強迫ssl2,ssl3tls1, 同樣的事情。現在,當我在埠 465(Postfix 的 SMTP)上執行相同的測試時:

openssl s_client -connect myserver.tld:465

我得到一個神奇的220 myserver.tld ESMTP Postfix (Debian/GNU).Wonderful。基於 MySQL 的身份驗證甚至可以工作!問題是 Dovecot 無法正確啟動 SSL 連接,而 Postfix 可以。兩種服務共享相同的配置,Postfix 甚至使用 Dovecot 身份驗證。

配置

鴿舍配置:

ssl = required
ssl_cert = </etc/ssl/myserver/myserver.tld.crt
ssl_key = </etc/ssl/myserver/myserver.tld.key
ssl_verify_client_cert = no
ssl_protocols = !SSLv2 !SSLv3 !TLSv1
ssl_cipher_list = HIGH:!SSLv2:!SSLv3:!TLSv1.0:!aNULL:!MD5

Postfix主要配置:

smtpd_tls_cert_file = /etc/ssl/myserver/myserver.tld.crt
smtpd_tls_key_file = /etc/ssl/myserver/myserver.tld.key
smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_loglevel = 3
smtpd_tls_received_header = no
smtpd_tls_security_level = may
smtpd_tls_session_cache_timeout = 3600s

smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes

smtpd_recipient_restrictions =
       permit_sasl_authenticated,
       permit_mynetworks,
       reject_unauth_destination

後綴主配置:

smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes

SSL 證書是自簽名的,我自己生成的。通過 SMTP,它看起來還不錯。

日誌

pop3-login: Disconnected (no auth attempts in 0 secs): user=<>, rip=xx.xx.xx.xx, lip=xx.xx.xx.xx, TLS handshaking: SSL_accept() failed: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher, session=<ffu9UFnxZQBtvqmF>

openssl s_client(在使用該實用程序嘗試 ssl2 或 tls1 時,我得到一個“未知協議” )

有誰知道我在哪裡犯了 Dovecot 的配置錯誤?

您實際上已經在 dovecot 中禁用了 SSLv2、SSLv3 和 TLSv1.0。

ssl_protocols = !SSLv2 !SSLv3 !TLSv1
ssl_cipher_list = HIGH:!SSLv2:!SSLv3:!TLSv1.0:!aNULL:!MD5

這是一個問題,因為一些客戶端還不會說 TLSv1.1/TLSv1.2,這是您唯一剩下的選擇。

嘗試不禁用 TLSv1.0,看看你是否能走得更遠。

引用自:https://serverfault.com/questions/571495