проблемы с сертификатом dovecot imap ssl

проблемы с сертификатом 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, и это работает нормально:

$ 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/[email protected]
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/[email protected]
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/[email protected]
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/[email protected]
   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/[email protected]
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.

по крайней мере, я предполагаю, что это провал???

решение1

Проблема в openssl, а не в dovecot.

ЕстьЖукв openssl, который останавливает поиск CApath по умолчанию, поэтому вам нужно указать, где найти список корневых сертификатов CA, добавив -CApathв командную строку. Например:

sudo openssl s_client -connect localhost:143 -starttls imap -CApath /dev/null 

Если вы еще не заполнили папку с сертификатами и хорошо разбираетесь в компьютерах, то следуйте инструкциямэтот урокдля загрузки certdata.txt из Mozilla и генерации необходимых PEM-файлов и символических ссылок. Скрипты могут потребовать изменения, если у вас нет доступа к /bin, и вам нужно будет создать символическую ссылку ln -s ca-bundle.crt cert.pem.

(Указание /dev/null заставляет openssl использовать путь по умолчанию cert.pem в вашем каталоге openssl. Чтобы узнать, где находится ваш каталог openssl, введите openssl version -d).

Поскольку вы используете StartSSL, вам может потребоваться объединить ваш сертификат и их промежуточный сертификат для dovecot, в вашем случае StartCom Class 2 Primary Intermediate Server CA. Их бесплатный сертификат использует StartCom Class 1 Primary Intermediate Server CA

решение2

Вы можете использовать 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

решение3

Старый вопрос — новые проблемы (на этот раз сертификаты Letsencrypt):
«Проверьте код возврата: 21 (не удалось проверить первый сертификат)"
(это означает, что промежуточный сертификат (цепочка) не найден/не используется для проверки)

Вот решение, которое я нашел после долгих проб и ошибок за последние 24 часа.

Сначала позвольте мне рассказать, что я использовал для тестирования:
у меня есть Dovecot на другом почтовом сервере (Ubuntu 18.xx) и у него ТЕ ЖЕ local.confнастройки Dovecot, кроме используемых доменов/сертификатов. Оба используют сертификаты 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.

Решение/краткий обзор:

Использоватьполнаяцепочка.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

Связанный контент