problemas con el certificado ssl dovecot imap

problemas con el certificado ssl dovecot imap

He estado intentando configurar mi servidor imap dovecot (versión 1.0.10; la actualización no es una opción en esta etapa) con un nuevo certificado ssl en ubuntu de esta manera:

$ 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]

no muestra ningún error y cuando lo ejecuto ps aux | grep dovecotme sale

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 todo va bien. Entonces pruebo para ver si puedo hacer telnet al servidor Dovecot, y esto funciona bien:

$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
* OK Dovecot ready.

pero cuando pruebo si dovecot ha configurado los certificados SSL correctamente, parece fallar:

$ 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.

Al menos, ¿supongo que esto es un fracaso?

Respuesta1

El problema es con openssl, no con dovecot.

Hayun insectoen openssl, lo que le impide buscar el CApath predeterminado, por lo que debe indicarle dónde encontrar la lista de certificados de CA raíz agregándolos -CApatha su línea de comando. Por ejemplo:

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

Si aún no ha completado su carpeta de certificados y tiene conocimientos de informática, sigaeste tutorialpara descargar certdata.txt de Mozilla y generar los archivos PEM y enlaces simbólicos necesarios. Es posible que sea necesario modificar los scripts si no tiene acceso a /bin y necesitará crear un enlace simbólico ln -s ca-bundle.crt cert.pem.

(Especificar /dev/null obliga a openssl a utilizar la ruta predeterminada de cert.pem en su directorio de openssl. Para saber dónde está su directorio de openssl, escriba openssl version -d).

Dado que está utilizando StartSSL, es posible que deba concatenar su certificado y su certificado intermedio para dovecot, en su caso CA de servidor intermedio primario StartCom Clase 2. Su certificado gratuito utiliza CA de servidor intermedio primario StartCom Clase 1

Respuesta2

Puede usarlo verbose_ssl = yesen la configuración de palomar para producir resultados de registro adicionales.

En mi configuración (dovecot 2.0) utilizo las siguientes declaraciones:

 ssl_cert = </etc/ssl/certs/mydomain.com.crt.20120904
 ssl_key = </etc/ssl/private/mydomain.com.key.20120904

Respuesta3

Antigua pregunta: nuevos problemas (esta vez, certificados Letsencrypt):
"Verificar código de retorno: 21 (no se puede verificar el primer certificado)"
(lo que significa que el Certificado Intermedio (cadena) no se encuentra/utiliza para verificar)

Aquí está la solución que encontré después de muchas pruebas y errores durante las últimas 24 horas.

Primero permítanme presentarles lo que usé para las pruebas:
tengo Dovecot en otro servidor de correo electrónico (Ubuntu 18.xx) y tiene la MISMA local.confconfiguración de Dovecot además de los dominios/certificados utilizados. Ambos utilizan certificados Letsencrypt y ambos fueron renovados ayer.

El Dovecot (versión 2.2.33.2) en Ubuntu 18 funciona perfectamente.
No hay códigos de error usandoopenssl s_clientpara probar los puertos de correo electrónico :993/IMAP o :995/POP.

Pero, en otra máquina (la que muestra el error) uso:

SO: Ubuntu 20.04.2
Dovecot (versión predeterminada/repositorio de Ubuntu): 2.3.7.2 (3c910f64b)
OpenSSL (versión predeterminada/repositorio de Ubuntu):1.1.1f 31 Mar 2020

El error me llamó la atención después de que un cliente se quejara sobre agregar una cuenta de correo electrónico a un teléfono Android (aplicación de correo electrónico predeterminada de Google/Gmail):

"No se puede confiar en el certificado".

Si uso el certificado para web o smtp, la prueba de openssl funciona bien y se verifica.
Esto me lleva a creer que el problema está en Dovecot en Ubuntu 20.

Otros clientes de correo electrónico como Thunderbird y Outlook también funcionan bien.

Inmediatamente decidí probar con 'openssl s_client' y el error finalmente me trajo aquí.

Mi configuración se veía así tanto en las máquinas Dovecot rotas como en las que funcionaban:

 ssl_ca = </etc/letsencrypt/live/{CertName}/fullchain.pem
 ssl_cert = </etc/letsencrypt/live/{CertName}/cert.pem
 ssl_key  = </etc/letsencrypt/live/{CertName}/privkey.pem

No he determinado qué software causa el error, pero lo he solucionado. El teléfono Android ahora confía plenamente en el certificado. Al ingresar, sabía que el error probablemente se debía a la falta de verificación de la cadena de certificados/CA.

Solución/TL;DR:

Utilizar elcadena completa.pemcomo entrada de su certificado ( ssl_cert =). Contiene tanto su certificado LE como su cadena.

Su configuración de Dovecot para SSL debería verse así (reemplace {CertName} con el suyo, 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

Ya no deberías ver el error durante la prueba:

 Verify return code: 0 (ok)

No necesitaba cambiar nada en la máquina que no mostraba el error (Ubuntu 18), así que no lo hice.

Actualización:
Dovecot que se utiliza actualmente con el repositorio/apt de Ubuntu 20 está/fue afectado.
Referencia de error:https://dovecot.org/pipermail/dovecot/2021-April/121884.html

información relacionada