web-dev-qa-db-fra.com

Problème de bibliothèque TLS lors de la connexion à Dovecot

J'ai un certificat Comodo PositiveSSL délivré pour mail.btcontract.com et j'ai configuré Postfix et Dovecot pour qu'il fonctionne de la manière suivante:

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

J'ai généré pem sur crt à la suite de ce tutoriel: http://blog.wong42.com/2011/05/converting-a-ssl-certificate-from- crt-format-to-pem /

Le problème est que lorsque j'essaie de me connecter à mon serveur à partir d'un client de messagerie Thunderbird, je vois les erreurs suivantes:

enter image description hereenter image description here

En même temps dans /var/log/mail.log Je vois ça:

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]  

Quand j'essaie openssl s_client -connect mail.btcontract.com:143 -starttls imap Je vois d'abord ceci:

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

Que se passe-t-il et que dois-je faire pour régler tout cela?
En outre, ce sont tous les fichiers que j'ai de l'autorité de certification: enter image description here

Je n'utilise pas de certificats intermédiaires n'importe où, cela pourrait-il être la source de problèmes?

[~ # ~] mise à jour [~ # ~]

Suivant les conseils de Thomas Pornin, j'ai fait ce qui suit:

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

puis dans 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

Et maintenant, je reçois une erreur différente:

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:  

J'ai essayé de changer de place pour les certificats concaténés et j'ai également essayé d'inclure root ca comme ceci:

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

Mais pas de chance pour l'instant.

7
src091

En SSL/TLS, le serveur est censé envoyer non seulement son certificat, mais une chaîne complète qui va de la racine au certificat du serveur (la racine elle-même peut être omise, mais l'autorité de certification intermédiaire doit être envoyée). Si le serveur n'envoie pas de chaîne complète, il appartient au client d'essayer de la compléter, par ex. en téléchargeant le certificat manquant, mais il n'est pas obligatoire pour les clients SSL/TLS de faire tout effort à cet égard. Un client peut rejeter immédiatement une chaîne incomplète.

L'option smtpd_tls_cert_file Doit pointer vers un fichier qui contient la chaîne, c'est-à-dire tous les certificats au format PEM, concaténés dans l'ordre de la chaîne (en commençant par le certificat du serveur). Voir la documentation . Le format PEM est celui où le certificat est codé en Base64, avec un en-tête explicite -----BEGIN CERTIFICATE-----. Si vous avez un certificat au format binaire, vous pouvez le convertir en PEM avec:

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

Ouvrez d'abord avec un éditeur de texte (ou une simple commande more) les certificats que vous devez voir s'ils sont en binaire, ou déjà en PEM. Concatène ensuite les certificats PEM dans un seul fichier texte, comme décrit dans la documentation Postfix.

2
Thomas Pornin

J'ai eu un problème très similaire avec Postfix et Dovecot sur Ubuntu. J'avais acheté le certificat SSL de base de Comodo et parce que j'ai sélectionné "autre" comme type de serveur, je me suis retrouvé avec un fichier Zip contenant quatre fichiers de certificat, selon les articles ci-dessus.

Je n'obtenais pas d'exceptions de sécurité dans le client. Dans mon cas, je ne pouvais même pas dépasser la configuration du compte et la détection de serveur dans Thunderbird, malgré la sélection des bons ports dans Thunderbird. Dans le journal système du serveur, je recevais des erreurs d'abandon de connexion SSL sur une autorité de certification inconnue, comme mentionné ci-dessus.

J'ai corrigé cela avec succès en utilisant un éditeur de texte pour concaténer les quatre certificats en un seul fichier, en commençant par mon propre certificat en haut, puis par la suite les deux certificats intermédiaires et enfin le certificat CA en bas. J'ai ensuite pointé la configuration de Postfix et de Dovecot vers ce fichier combiné et Thunderbird a pu se connecter et j'ai pu envoyer/recevoir des e-mails.

4
Erik Wallace

Vérifiez que votre clé n'est pas protégée par une phrase secrète. Postfix ne prend pas en charge les clés protégées par mot de passe de toute façon, vous pouvez supprimer la phrase secrète de la clé à l'aide d'une commande openssl

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

il n'est pas nécessaire d'inclure l'autorité de certification racine si votre ensemble d'autorités de certification n'inclut pas votre racine CA, vous pouvez l'ajouter:

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

Et puis changez cette ligne:

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

pour celui-ci

smtpd_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
3
Adrian Dussan