
Eu tenho tentado configurar meu servidor dovecot imap (versão 1.0.10 - a atualização não é uma opção neste estágio) com um novo certificado SSL no Ubuntu assim:
$ 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]
não mostra nenhum erro e quando executo ps aux | grep dovecot
recebo
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
que parece que está tudo funcionando bem. então eu testo para ver se consigo telnet para o servidor dovecot, e isso funciona bem:
$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.
mas quando testo se o dovecot configurou os certificados SSL corretamente, parece falhar:
$ 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.
pelo menos, presumo que isso seja um fracasso???
Responder1
O problema é com o openssl, não com o dovecot.
Háum insetono openssl, que o impede de procurar o CApath padrão, portanto, você precisa informar onde encontrar a lista de certificados de CA raiz adicionando -CApath
à sua linha de comando. Por exemplo:
sudo openssl s_client -connect localhost:143 -starttls imap -CApath /dev/null
Se você ainda não preencheu sua pasta certs e tem conhecimentos de informática, sigaeste tutorialpara baixar certdata.txt da Mozilla e gerar os arquivos PEM e links simbólicos necessários. Os scripts podem precisar de modificação se você não tiver acesso a /bin e precisará criar um link simbólico ln -s ca-bundle.crt cert.pem.
(Especificar /dev/null força o openssl a usar o caminho padrão de cert.pem em seu diretório openssl. Para descobrir onde está seu diretório openssl, digite openssl version -d
).
Como você está usando StartSSL, pode ser necessário concatenar seu certificado e seu certificado intermediário para dovecot, no seu caso StartCom Class 2 Primary Intermediate Server CA. Seu certificado gratuito usa CA de servidor intermediário primário StartCom Classe 1
Responder2
Você pode usar verbose_ssl = yes
na configuração dovecot para produzir saída de log adicional.
Na minha configuração (dovecot 2.0) utilizo as seguintes instruções:
ssl_cert = </etc/ssl/certs/mydomain.com.crt.20120904
ssl_key = </etc/ssl/private/mydomain.com.key.20120904
Responder3
Pergunta antiga - novos problemas (certificados Letsencrypt desta vez):
"Verifique o código de retorno: 21 (não foi possível verificar o primeiro certificado)"
(significando que o Certificado Intermediário (cadeia) não está sendo encontrado/usado para verificação)
Aqui está a solução que encontrei depois de muitas tentativas e erros nas últimas 24 horas.
Primeiro, deixe-me começar o que usei para teste:
tenho o Dovecot em outro servidor de e-mail (Ubuntu 18.xx) e ele tem as MESMAS local.conf
configurações do Dovecot diferentes dos domínios/certificados usados. Ambos usam certificados Letsencrypt e ambos foram renovados ontem.
O Dovecot (versão 2.2.33.2) no Ubuntu 18 funciona perfeitamente.
Nenhum código de erro usandoopenssl s_clientpara testar portas de e-mail :993/IMAP ou :995/POP.
Mas, em outra máquina (aquela que apresenta o erro) eu uso:
SO: Ubuntu 20.04.2
Dovecot (versão padrão/repo do Ubuntu): 2.3.7.2 (3c910f64b)
OpenSSL (versão padrão/repo do Ubuntu):1.1.1f 31 Mar 2020
O erro chamou minha atenção depois que um cliente reclamou sobre a adição de uma conta de e-mail a um telefone Android (aplicativo de e-mail padrão do Google/Gmail):
"O certificado não é confiável."
Se eu usar o certificado para web ou smtp, o teste openssl funciona bem e verifica.
Isso me leva a acreditar que o problema está no Dovecot no Ubuntu 20.
Outros clientes de email como Thunderbird e Outlook também funcionam bem.
Decidi imediatamente testar com 'openssl s_client' e o erro acabou me trazendo aqui.
Minha configuração ficou assim nas máquinas dovecot quebradas e em funcionamento:
ssl_ca = </etc/letsencrypt/live/{CertName}/fullchain.pem
ssl_cert = </etc/letsencrypt/live/{CertName}/cert.pem
ssl_key = </etc/letsencrypt/live/{CertName}/privkey.pem
Não determinei qual software causa o erro, mas eliminei o erro. O telefone Android agora confia totalmente no certificado. Ao entrar eu sabia que o erro provavelmente foi causado pela falta de verificação da cadeia de certificados/CA.
Solução/TL;DR:
Use ofullchain.pemcomo sua entrada de certificado ( ssl_cert =
). Ele contém seu certificado LE e sua cadeia.
Sua configuração Dovecot para SSL deve ser semelhante a esta (substitua {CertName} pela sua, obviamente):
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
Você não deverá mais ver o erro durante o teste:
Verify return code: 0 (ok)
Não precisei alterar nada na máquina que não apresentava o erro (Ubuntu 18) - então não o fiz.
Atualização:
o Dovecot usado atualmente com o repositório/apt do Ubuntu 20 é/foi afetado.
Referência de bug:https://dovecot.org/pipermail/dovecot/2021-April/121884.html