problema de la biblioteca TLS al conectarse a Dovecot

8

Tengo un certificado Comodo PositiveSSL emitido para mail.btcontract.com y configuré Postfix y Dovecot para que funcionen de la siguiente manera:

Postfix main.cf:

smtpd_tls_cert_file  = /etc/ssl/mail/mail_btcontract_com.crt
smtpd_tls_key_file   = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile     = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile      = /etc/ssl/mail/AddTrustExternalCARoot.crt

dovecot.conf:

ssl_cert =< /etc/ssl/mail/mail_btcontract_com.pem
ssl_key  =< /etc/ssl/mail/mail_btcontract_com.key

He generado pem de crt siguiendo este tutorial: enlace

El problema es que cuando intento conectarme a mi servidor desde un cliente de correo de Thunderbird, veo los siguientes errores:

Al mismo tiempo, en /var/log/mail.log veo esto:

Nov 16 12:15:57 BTContractTest postfix/smtpd[22870]: connect from 51-28-134-95.pool.ukrtel.net[95.134.28.51]
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: Anonymous TLS connection established from 51-28-134-95.pool.ukrtel.net[95.134.28.51]: TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: warning: TLS library problem: 22870:error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1258:SSL alert number 48:
Nov 16 12:15:58 BTContractTest postfix/smtpd[22870]: lost connection after STARTTLS from 51-28-134-95.pool.ukrtel.net[95.134.28.51]  

Cuando intento openssl s_client -connect mail.btcontract.com:143 -starttls imap , primero veo esto:

CONNECTED(00000003)
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=27:certificate not trusted
verify return:1
depth=0 OU = Domain Control Validated, OU = PositiveSSL, CN = mail.btcontract.com
verify error:num=21:unable to verify the first certificate
verify return:1

¿Qué está pasando y qué debo hacer para solucionar todo esto?
Además, estos son todos los archivos que tengo de la autoridad de certificación:

No uso certificados intermedios en ningún lugar, ¿podría ser la fuente del problema?

ACTUALIZACIÓN

Siguiendo el consejo de Thomas Pornin, hice lo siguiente:

cat mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt  

y luego en Postfix main.cf:

smtpd_tls_cert_file  = /etc/ssl/mail/full.crt
smtpd_tls_key_file   = /etc/ssl/mail/mail_btcontract_com.key
smtpd_tls_CAfile     = /etc/ssl/mail/AddTrustExternalCARoot.crt
smtp_tls_CAfile      = /etc/ssl/mail/AddTrustExternalCARoot.crt

dovecot.conf:

ssl_cert =< /etc/ssl/mail/full.crt

Y ahora obtengo un error diferente:

Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: cannot get RSA private key from file /etc/ssl/mail/mail_btcontract_com.key: disabling TLS support 
Nov 16 13:28:09 BTContractTest postfix/smtpd[23921]: warning: TLS library problem: 23921:error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch:x509_cmp.c:330:  

He intentado cambiar lugares de certificados concatenados y también he intentado incluir raíz ca de esta manera:

cat AddTrustExternalCARoot.crt mail_btcontract_com.crt COMODORSAAddTrustCA.crt COMODORSADomainValidationSecureServerCA.crt > full.crt  

Pero no hay suerte hasta ahora.

    
pregunta Anton 16.11.2014 - 13:43
fuente

3 respuestas

3

En SSL / TLS, el servidor debe enviar no solo su certificado, sino también una cadena completa que va desde la raíz al certificado del servidor (la raíz misma puede omitirse, pero se debe enviar la CA intermedia). Si el servidor no envía una cadena completa, entonces depende del cliente intentar completarla, por ejemplo. descargando el certificado faltante, pero no es obligatorio que los clientes SSL / TLS hagan ningún esfuerzo al respecto. Un cliente puede rechazar una cadena incompleta de inmediato.

La opción smtpd_tls_cert_file debería apuntar a un archivo que contenga la cadena, es decir, todos los certificados en formato PEM, concatenados en el orden de la cadena (comenzando con el certificado del servidor). Consulte la documentación . El formato PEM es aquel en el que el certificado está codificado en Base64, con un encabezado explícito -----BEGIN CERTIFICATE----- . Si tiene un certificado en formato binario, puede convertirlo a PEM con:

openssl x509 -inform DER -in cert.crt -out cert.pem

Primero abra con un editor de texto (o un simple comando more ) los certificados que tiene que ver si están en binario, o ya en PEM. Luego concatena los certificados PEM en un solo archivo de texto, como se describe en la documentación de Postfix.

    
respondido por el Thomas Pornin 16.11.2014 - 14:03
fuente
5

Tuve un problema muy similar con Postfix y Dovecot en Ubuntu. Compré el certificado SSL básico de Comodo y, como seleccioné "otro" como tipo de servidor, obtuve un archivo zip con cuatro archivos de certificado, según las publicaciones anteriores.

No estaba recibiendo excepciones de seguridad en el cliente. En mi caso, ni siquiera pude superar la configuración de la cuenta y la detección del servidor en Thunderbird, a pesar de haber seleccionado los puertos correctos en Thunderbird. En el registro del sistema del servidor estaba obteniendo errores de cancelación de conexión SSL sobre CA desconocida, como se mencionó anteriormente.

Resolví esto con éxito usando un editor de texto para concatenar los cuatro certificados en un solo archivo, comenzando con mi propio certificado en la parte superior y luego los dos certificados intermedios y finalmente el certificado CA en la parte inferior. Luego señalé la configuración de Postfix y Dovecot a este archivo combinado y Thunderbird pudo conectarse y pude enviar / recibir correos electrónicos.

    
respondido por el Erik Wallace 24.11.2014 - 00:18
fuente
2

Verifique que su Clave no esté protegida por frase de contraseña. Postfix no admite claves protegidas con contraseña De todos modos, puede eliminar la contraseña de la clave con un comando openssl

openssl rsa -in passphrase.key -out nopassphrase.key

no es necesario incluir la CA raíz Si su CA Bundle no incluye su CA Root Puedes adjuntarlo:

cat /etc/ssl/mail/AddTrustExternalCARoot.crt >> /etc/ssl/certs/ca-bundle.crt

Y luego cambia esta línea:

  

smtpd_tls_CAfile = /etc/ssl/mail/AddTrustExternalCARoot.crt

para este

smtpd_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
    
respondido por el Adrian Dussan 25.11.2014 - 00:50
fuente

Lea otras preguntas en las etiquetas