Dovecot 握手失败,Postfix 成功

Dovecot 握手失败,Postfix 成功

我正在尝试设置一个依赖于 MySQL 后端的 Dovecot/Postfix 结构。我遇到了 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

我进行了相同的测试,强制执行了ssl2ssl3tls1结果相同。现在,当我在端口 465 (Postfix 的 SMTP) 上运行相同的测试时:

openssl s_client -connect myserver.tld:465

我得到了一个神奇的220 myserver.tld ESMTP Postfix (Debian/GNU).惊喜。基于 MySQL 的身份验证甚至可以工作!问题是 Dovecot 无法正确启动 SSL 连接,而 Postfix 可以。两种服务共享相同的配置,Postfix 甚至使用 Dovecot 身份验证。

配置

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

Postfix 主配置:

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>

(当我尝试使用该实用程序的 ssl2 或 tls1 时,出现“未知协议” openssl s_client

有人知道我在哪里犯了 Dovecot 的配置错误吗?

答案1

您实际上已经在 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,看看是否可以取得进一步进展。

相关内容