Postfix "avertissement: impossible d'obtenir la clé privée RSA du fichier"

14

Je viens de suivre ce tutoriel pour configurer un serveur de messagerie postfix avec dovecot et mysql comme backend pour les utilisateurs virtuels.

Maintenant que je fais travailler la plupart des pièces, je peux me connecter à POP3 (S) et IMAP (S).

En utilisant

echo TEST-MAIL | mail [email protected]

fonctionne bien, lorsque je me connecte à mon compte hotmail, il affiche l'e-mail.

Cela fonctionne également en sens inverse, donc mon entrée MX pour example.com a finalement été propagée, donc je suis en mesure de recevoir des e-mails envoyés de [email protected] à [email protected] et de les visualiser dans Thunderbird en utilisant STARTTLS via IMAP.

Faire un peu plus de recherche après avoir reçu le message d'erreur " 5.7.1: Accès au relais refusé " lorsque j'essaie d'envoyer des mails à [email protected] en utilisant Thunderbird étant connecté à [email protected] , j'ai compris que mon serveur agissait comme un "Open Mail Relay", ce qui - bien sûr - est une mauvaise chose.

En creusant davantage dans les parties facultatives du tutoriel comme ce commentaire et l'autre turorial , j'ai décidé de terminer ces étapes également pour pouvoir envoyer des mails via [email protected] via Mozilla Thunderbird, sans obtenir le message d'erreur " 5.7.1 : Accès relais refusé "(car les serveurs de messagerie courants rejettent les e-mails relayés ouverts).

Mais maintenant, je suis tombé sur une erreur en essayant de faire fonctionner Postfix avec SMTPS, dans /var/log/mail.log, il lit

Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: cannot get RSA private key from file /etc/ssl/certs/postfix.pem: disabling TLS support
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:0906D06C:PEM routines:PEM_read_bio:no start line:pem_lib.c:650:Expecting: ANY PRIVATE KEY:
Sep 28 17:29:34 domain postfix/smtpd[20251]: warning: TLS library problem: 20251:error:140B0009:SSL routines:SSL_CTX_use_PrivateKey_file:PEM lib:ssl_rsa.c:669:

Cette erreur est enregistrée juste après que j'essaie d'envoyer un courrier à partir de mon serveur de messagerie nouvellement installé en utilisant SMTP SSL / TLS via le port 465 dans Thunderbird. Thunderbird me dit alors qu'un timeout s'est produit.

Google a quelques résultats concernant ce problème, mais je n'ai pas pu le faire fonctionner avec aucun d'entre eux. Je voudrais lier certains d'entre eux ici, mais en tant que nouvel utilisateur, je ne suis autorisé à utiliser que deux hyperliens.

Mon /etc/postfix/master.cf ressemble

smtp      inet  n       -       -       -       -       smtpd
smtps     inet  n       -       -       -       -       smtpd
   -o smtpd_tls_wrappermode=yes
   -o smtpd_sasl_auth_enable=yes

et nmap me dit

PORT     STATE SERVICE
[...]
465/tcp  open  smtps
[...]

mon /etc/postfix/main.cf ressemble

smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
append_dot_mydomain = no
readme_directory = no
#smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem            #default postfix generated
#smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key #default postfix generated
smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem
smptd_tls_key_file = /etc/ssl/private/postfix.pem
smtpd_use_tls = yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smptd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mydestination = localhost.com, localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_mailbox_domains = mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf
virtual_mailbox_maps = mysql:/etc/postfix/mysql-virtual-mailbox-maps.cf
virtual_alias_maps = mysql:/etc/postfix/mysql-virtual-alias-maps.cf
virtual_transport = dovecot
dovecot_destination_recipient_limit = 1
mailbox_command = /usr/lib/dovecot/deliver

Les fichiers * .pem ont été créés comme décrit dans le tutoriel ci-dessus, en utilisant

Postfix
To create a certificate to be used by Postfix use:

openssl req -new -x509 -days 3650 -nodes -out /etc/ssl/certs/postfix.pem -keyout /etc/ssl/private/postfix.pem

Do not forget to set the permissions on the private key so that no unauthorized people can read it:

chmod o= /etc/ssl/private/postfix.pem

You will have to tell Postfix where to find your certificate and private key because by default it will look for a dummy certificate file called "ssl-cert-snakeoil":

postconf -e smtpd_tls_cert_file=/etc/ssl/certs/postfix.pem
postconf -e smtpd_tls_key_file=/etc/ssl/private/postfix.pem

Je pense que je n'ai pas besoin d'inclure /etc/dovecot/dovecot.conf ici, car la connexion via imaps et pop3s fonctionne bien selon les journaux. Le seul problème est que postfix utilise correctement les certificats auto-générés et auto-signés.

Toute aide appréciée!

EDIT: Je viens d'essayer ce tutoriel différent sur la génération d'un certificat auto-signé pour postfix, obtenant toujours la même erreur. Je ne sais vraiment pas quoi tester d'autre.

J'ai également vérifié les bibliothèques SSL, mais tout semble aller bien:

  root@domain:~# ldd /usr/sbin/postfix
    linux-vdso.so.1 =>  (0x00007fff91b25000)
    libpostfix-global.so.1 => /usr/lib/libpostfix-global.so.1 (0x00007f6f8313d000)
    libpostfix-util.so.1 => /usr/lib/libpostfix-util.so.1 (0x00007f6f82f07000)
    libssl.so.0.9.8 => /usr/lib/libssl.so.0.9.8 (0x00007f6f82cb1000)
    libcrypto.so.0.9.8 => /usr/lib/libcrypto.so.0.9.8 (0x00007f6f82910000)
    libsasl2.so.2 => /usr/lib/libsasl2.so.2 (0x00007f6f826f7000)
    libdb-4.8.so => /usr/lib/libdb-4.8.so (0x00007f6f8237c000)
    libnsl.so.1 => /lib/libnsl.so.1 (0x00007f6f82164000)
    libresolv.so.2 => /lib/libresolv.so.2 (0x00007f6f81f4e000)
    libc.so.6 => /lib/libc.so.6 (0x00007f6f81beb000)
    libdl.so.2 => /lib/libdl.so.2 (0x00007f6f819e7000)
    libz.so.1 => /usr/lib/libz.so.1 (0x00007f6f817d0000)
    libpthread.so.0 => /lib/libpthread.so.0 (0x00007f6f815b3000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f6f83581000)

Après avoir suivi les instructions d' Ansgar Wiechers, cela fonctionne enfin.

postconf -ncontenait les lignes comme il se doit. La vérification du certificat / clé via openssl a montré que les deux fichiers sont valides.

Il s'agit donc bien d'un problème d'autorisations! Je ne savais pas que la récupération des fichiers /etc/ssl/*/postfix.pem dans postfix: postfix ne suffit pas pour que postfix lise les fichiers.

phew
la source

Réponses:

16

Le contenu de main.cfne représente pas nécessairement votre configuration Postfix active. Vérifiez la sortie de postconf -npour les deux paramètres suivants:

smtpd_recipient_restrictions = 
  permit_mynetworks, 
  permit_sasl_authenticated, 
  reject_unauth_destination
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

Si $mynetworksest limité à localhost et $smtpd_recipient_restrictionsapparaît permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationcomme les trois premières restrictions, alors vous n'êtes pas un relais ouvert.

Vérifiez qu'il /etc/ssl/private/postfix.pemcontient une clé valide et /etc/ssl/certs/postfix.pemcontient un certificat valide:

openssl rsa -in /etc/ssl/private/postfix.pem -check -noout
openssl x509 -in /etc/ssl/certs/postfix.pem -text -noout

Vous devez également vérifier si Postfix peut accéder au fichier. Sur mon serveur, les autorisations sur /etc/ssl/privatesont

drwx--x---  2 root ssl-cert  4096 Aug 03 01:55 private/

Ainsi, le simple fait de chownsaisir le fichier clé ne vous sera d'aucune utilité, car les permissions du répertoire empêchent Postfix d'accéder à n'importe quel fichier qu'il contient.

Essayez de simplifier votre configuration. Mettez le certificat et la clé dans un seul fichier:

cat /etc/ssl/*/postfix.pem > /etc/postfix/server.pem
chmod 640 /etc/postfix/server.pem
chown postfix:postfix /etc/postfix/server.pem

et changez votre main.cfcomme ceci:

smtpd_tls_cert_file = /etc/postfix/server.pem
smtpd_tls_key_file = $smtpd_tls_cert_file

Redémarrez Postfix et voyez si le serveur peut accéder à la clé.

Ansgar Wiechers
la source
Cela a résolu le problème , merci beaucoup, Ladadadada et Ansgar Wiechers .
ouf
Merci pour la postconf -npartie. Le copier-coller a abouti à un fichier CERT et une clé non liée et en me concentrant sur la sortie de celui-ci, j'ai pu voir la faute de frappe dans le fichier de configuration que j'avais déjà vérifiée mais que j'ai manquée ...
Adam Kerz
2

Ces instructions n'ont chmod o= /etc/ssl/private/postfix.pemrien dit sur l'utilisateur qui possède le fichier.

Sur mes boîtes, le smtpdprocessus s'exécute en tant postfixqu'utilisateur. Vérifiez que l' postfixutilisateur peut y accéder /etc/ssl/private/postfix.pem. Ou peut-être juste chown postfix:postfix /etc/ssl/private/postfix.pem.

L'autre problème évident est exactement ce que dit le message d'erreur: il n'y a pas de clé RSA valide dans ce fichier. Jetez un œil /etc/ssl/private/postfix.pemet assurez-vous qu'il contient au moins quelque chose qui ressemble à une clé RSA. Ne le collez pas dans votre question.

En fait, je viens de remarquer que le message d'erreur est pour /etc/ssl/certs/postfix.pem, non /etc/ssl/private/postfix.pem. Vérifiez également la propriété, les autorisations et le contenu /etc/ssl/certs/postfix.pem.


Ce message d'erreur est un peu déroutant. Il dit cannot get RSA private key from file /etc/ssl/certs/postfix.pemmais la clé privée devrait être dedans /etc/ssl/private/postfix.pem. Je n'ai pas assez d'expérience avec Postfix en utilisant TLS pour savoir s'il s'agit d'un bogue Postfix ou d'une erreur dans votre configuration.

Ladadadada
la source
J'ai chown'ed les deux fichiers à postfix: postfix puis redémarré postfix, mais essayer d'envoyer un e-mail reproduit toujours l'erreur dans /var/log/mail.log
ouf
root @ domain: / etc / ssl / certs # ls -l postfix.pem -rw-r - r-- 1 postfix postfix 1363 28 sept 16:36 postfix.pem et il semble contenir le contenu du certificat, en commençant par - --- DÉBUT DU CERTIFICAT ----- contenant des données jusqu'au ----- FIN DU CERTIFICAT -----
ouf
Je me posais également des questions à ce sujet, alors j'ai essayé d'échanger les fichiers. Mais cela n'a aucun sens car le fichier dans / certs / contient l'en-tête du certificat "---- BEGIN CERTIFICATE -----". Merci de toute façon pour votre aide.
ouf
1

Le certificat doit correspondre à la clé, dans mon cas, cela n'avait rien à voir avec les autorisations

créer un certificat et une clé auto-signés https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/

J'espère que cela t'aides

user397245
la source
Ne serait-il pas préférable d'utiliser un certificat de cryptage gratuit?
poussins
Doh, merci! Le copier-coller a généré un fichier CERT et une clé non liée.
Adam Kerz
0

vérifiez que la clé ne comporte pas de phrase secrète. Vous pouvez le supprimer avec

openssl rsa -in key.pem -out newkey.pem

s'ils sont ensemble, utilisez

openssl rsa -in mycert.pem -out newcert.pem
openssl x509 -in mycert.pem >>newcert.pem

La phrase secrète émettra un avertissement sur les journaux indiquant qu'elle n'a pas pu obtenir la clé privée RSAA, ce qui désactive à son tour la prise en charge TLS. J'espère que cela aide quelqu'un!

user419756
la source