
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 dovecot
me 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 -CApath
a 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 = yes
en 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.conf
configuració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