Назад | Перейти на главную страницу

Ошибка рукопожатия Dovecot при успехе Postfix

Я пытаюсь настроить структуру 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, ssl3 и tls1, то же самое. Теперь, когда я запускаю тот же тест на порту 465 (SMTP от Postfix):

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?

Вы фактически отключили SSLv2, SSLv3 и TLSv1.0 в dovecot.

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

Это проблема, потому что некоторые клиенты еще не говорят на TLSv1.1 / TLSv1.2, ваш единственный оставшийся выбор.

Постарайтесь не отключать TLSv1.0 и посмотрите, не продвинетесь ли вы дальше.