Я пытаюсь настроить структуру 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 и посмотрите, не продвинетесь ли вы дальше.