Вопросы сертификата dovecot imap ssl
Я пытался настроить мой сервер dovecot imap (версия 1.0.10 - на этом этапе обновление не вариант) с помощью нового сертификата ssl в Ubuntu, например:
$ grep ^ssl /etc/dovecot/dovecot.conf
ssl_disable = no
ssl_cert_file = /etc/ssl/certs/mydomain.com.crt.20120904
ssl_key_file = /etc/ssl/private/mydomain.com.key.20120904
$ /etc/init.t/dovecot stop
$ sudo dovecot -p
$ [i enter the ssl password here]
это не показывает никаких ошибок, и когда я бегу ps aux | grep dovecot
я получил
root 21368 0.0 0.0 12452 688 ? Ss 15:19 0:00 dovecot -p
root 21369 0.0 0.0 71772 2940 ? S 15:19 0:00 dovecot-auth
dovecot 21370 0.0 0.0 14140 1904 ? S 15:19 0:00 pop3-login
dovecot 21371 0.0 0.0 14140 1900 ? S 15:19 0:00 pop3-login
dovecot 21372 0.0 0.0 14140 1904 ? S 15:19 0:00 pop3-login
dovecot 21381 0.0 0.0 14280 2140 ? S 15:19 0:00 imap-login
dovecot 21497 0.0 0.0 14280 2116 ? S 15:29 0:00 imap-login
dovecot 21791 0.0 0.0 14148 1908 ? S 15:48 0:00 imap-login
dovecot 21835 0.0 0.0 14148 1908 ? S 15:53 0:00 imap-login
dovecot 21931 0.0 0.0 14148 1904 ? S 16:00 0:00 imap-login
me 21953 0.0 0.0 5168 944 pts/0 S+ 16:02 0:00 grep --color=auto dovecot
похоже, все работает нормально. тогда я проверяю, могу ли я подключиться к серверу dovecot, и это работает нормально:
$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.
но когда я проверяю, правильно ли dovecot сконфигурировал ssl-сертификаты, кажется, что он не работает
$ sudo openssl s_client -connect localhost:143 -starttls imap
CONNECTED(00000003)
depth=0 /description=xxxxxxxxxxxxxxxxx/C=AU/ST=xxxxxxxx/L=xxxx/O=xxxxxx/CN=*.mydomain.com/emailAddress=postmaster@mydomain.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 /description=xxxxxxxxxxx/C=AU/ST=xxxxxx/L=xxxx/O=xxxx/CN=*.mydomain.com/emailAddress=postmaster@mydomain.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 /description=xxxxxxxx/C=AU/ST=xxxxxxxxxx/L=xxxx/O=xxxxx/CN=*.mydomain.com/emailAddress=postmaster@mydomain.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/description=xxxxxxxxxxxx/C=AU/ST=xxxxxxxxxx/L=xxxxxxxx/O=xxxxxxx/CN=*.mydomain.com/emailAddress=postmaster@mydomain.com
i:/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
---
Server certificate
-----BEGIN CERTIFICATE-----
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxx
.
.
.
xxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxx==
-----END CERTIFICATE-----
subject=/description=xxxxxxxxxx/C=AU/ST=xxxxxxxxx/L=xxxxxxx/O=xxxxxx/CN=*.mydomain.com/emailAddress=postmaster@mydomain.com
issuer=/C=IL/O=StartCom Ltd./OU=Secure Digital Certificate Signing/CN=StartCom Class 2 Primary Intermediate Server CA
---
No client certificate CA names sent
---
SSL handshake has read 2831 bytes and written 342 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: xxxxxxxxxxxxxxxxxxxx
Session-ID-ctx:
Master-Key: xxxxxxxxxxxxxxxxxx
Key-Arg : None
Start Time: 1351661960
Timeout : 300 (sec)
Verify return code: 21 (unable to verify the first certificate)
---
. OK Capability completed.
по крайней мере, я предполагаю, что это сбой???
3 ответа
Проблема в openssl, а не в dovecot.
В openssl есть ошибка, которая останавливает его поиск стандартного CApath, поэтому вам нужно указать, где найти список сертификатов корневого CA, добавив -CApath
в вашей командной строке. Например:
sudo openssl s_client -connect localhost:143 -starttls imap -CApath /dev/null
Если вы еще не заполнили свою папку certs и у вас есть компьютерные знания, следуйте этому руководству, чтобы загрузить certdata.txt из Mozilla и сгенерировать необходимые файлы PEM и символические ссылки. Сценарии могут нуждаться в модификации, если у вас нет доступа к /bin, и вам нужно будет создать символическую ссылку ln -s ca-bundle.crt cert.pem.
(Указание /dev/null заставляет openssl использовать путь по умолчанию для cert.pem в вашем каталоге openssl. Чтобы узнать, где находится ваш каталог openssl, введите openssl version -d
).
Поскольку вы используете StartSSL, вам может потребоваться объединить ваш сертификат и его промежуточный сертификат для dovecot, в вашем случае - CA CA Первичного промежуточного сервера StartCom Class 2. В их бесплатном сертификате используется первичный промежуточный сервер CA StartCom Class 1
Вы можете использовать verbose_ssl = yes
в конфигурации dovecot для получения дополнительных результатов ведения журнала.
В моей конфигурации (dovecot 2.0) я использую следующие утверждения:
ssl_cert = </etc/ssl/certs/mydomain.com.crt.20120904
ssl_key = </etc/ssl/private/mydomain.com.key.20120904
Старый вопрос — новые проблемы (на этот раз сертификаты Letsencrypt):
« Проверка кода возврата: 21 (невозможно проверить первый сертификат) »
(это означает, что промежуточный сертификат (цепочка) не найден/не используется для проверки)
Вот решение, которое я нашел после долгих проб и ошибок за последние 24 часа.
Сначала позвольте мне рассказать о том, что я использовал для тестирования:
у меня есть Dovecot на другом почтовом сервере (Ubuntu 18.xx), и у него ТОТ ЖЕ Dovecot.local.conf
настройки, отличные от используемых доменов/сертификатов. Оба используют сертификаты Letsencrypt и оба были продлены вчера.
Dovecot (версия 2.2.33.2) в Ubuntu 18 работает отлично.
Никаких кодов ошибок при использовании openssl s_client для проверки портов электронной почты:993/IMAP или:995/POP.
Но на другой машине (той, на которой отображается ошибка) я использую:
ОПЕРАЦИОННЫЕ СИСТЕМЫ:Ubuntu 20.04.2
Dovecot (версия Ubuntu по умолчанию/репозиторий):2.3.7.2 (3c910f64b)
OpenSSL (версия Ubuntu по умолчанию/репозиторий):1.1.1f 31 Mar 2020
Ошибка привлекла мое внимание после того, как клиент пожаловался на добавление учетной записи электронной почты на телефон Android (почтовое приложение Google/Gmail по умолчанию):
«Сертификату нельзя доверять».
Если я использую сертификат для Интернета или smtp, тест openssl работает нормально и проверяет.
Это наводит меня на мысль, что проблема связана с Dovecot в Ubuntu 20.
Другие почтовые клиенты, такие как Thunderbird и Outlook, также работают нормально.
Я сразу решил протестировать с помощью «openssl s_client», и в конце концов ошибка привела меня сюда.
Мой конфиг выглядел так и на сломанной, и на рабочей машинах dovecot:
ssl_ca = </etc/letsencrypt/live/{CertName}/fullchain.pem
ssl_cert = </etc/letsencrypt/live/{CertName}/cert.pem
ssl_key = </etc/letsencrypt/live/{CertName}/privkey.pem
Я не определил, какое программное обеспечение вызывает ошибку, но я устранил ошибку. Телефон Android теперь полностью доверяет сертификату. Войдя в систему, я понял, что ошибка, вероятно, вызвана отсутствием проверки цепочки сертификатов/CA.
Решение/TL;DR:
Используйте fullchain.pem в качестве записи сертификата (ssl_cert =
). Он содержит как ваш сертификат LE, так и цепочку.
Ваша конфигурация Dovecot для SSL должна выглядеть следующим образом (очевидно, замените {CertName} на свой собственный):
ssl_ca = </etc/letsencrypt/live/{CertName}/chain.pem (or 'fullchain' should work)
ssl_cert = </etc/letsencrypt/live/{CertName}/fullchain.pem
ssl_key = </etc/letsencrypt/live/{CertName}/privkey.pem
Во время тестирования вы больше не должны видеть ошибку:
Verify return code: 0 (ok)
Мне не нужно было ничего менять на машине, на которой не отображается ошибка (Ubuntu 18), поэтому я этого и не сделал.
Обновление:
Dovecot, используемый в настоящее время с репозиторием/apt Ubuntu 20, затронут.
Ссылка на ошибку: https://dovecot.org/pipermail/dovecot/2021-April/121884.html .