Postfix "Warnung: RSA Private Key kann nicht aus Datei abgerufen werden"

14

Ich habe gerade dieses Tutorial befolgt , um einen Postfix-Mailserver mit Dovecot und MySQL als Backend für virtuelle Benutzer einzurichten.

Jetzt habe ich die meisten Teile zum Laufen gebracht, ich kann mich mit POP3 (S) und IMAP (S) verbinden.

Verwenden

echo TEST-MAIL | mail [email protected]

Funktioniert einwandfrei, wenn ich mich in meinem Hotmail-Konto anmelde, wird die E-Mail angezeigt.

Es funktioniert auch in umgekehrter Reihenfolge, daher wurde mein MX-Eintrag für example.com endgültig weitergegeben, sodass ich E-Mails von [email protected] an [email protected] empfangen und in Thunderbird mit STARTTLS über IMAP anzeigen kann.

Nachdem ich die Fehlermeldung " 5.7.1: Relay-Zugriff verweigert " erhalten hatte, als ich versuchte, mit Thunderbird, der bei [email protected] angemeldet war , E- Mails an [email protected] zu senden , stellte ich fest, dass mein Server aktiv war als "Open Mail Relay", was natürlich eine schlechte Sache ist.

Ich habe mich eingehender mit den optionalen Teilen des Tutorials wie diesem Kommentar und dem anderen Turorial befasst und mich dazu entschlossen, diese Schritte auch auszuführen , um E-Mails über [email protected] über Mozilla Thunderbird senden zu können , ohne die Fehlermeldung " 5.7.1 : Weiterleitungszugriff verweigert "mehr (da gängige Mailserver offene weitergeleitete E-Mails ablehnen).

Aber jetzt bin ich auf einen Fehler gestoßen, der versucht, Postfix mit SMTPS zum Laufen zu bringen. In /var/log/mail.log liest es

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:

Dieser Fehler wird sofort protokolliert, nachdem ich versucht habe, eine E-Mail von meinem neu installierten Mailserver mit SMTP SSL / TLS über Port 465 in Thunderbird zu senden. Thunderbird teilt mir dann mit, dass eine Zeitüberschreitung aufgetreten ist.

Google hat ein paar Ergebnisse zu diesem Problem, aber ich konnte es mit keinem davon zum Laufen bringen. Ich würde einige von ihnen hier verlinken, aber als neuer Benutzer darf ich nur zwei Hyperlinks verwenden.

Meine /etc/postfix/master.cf sieht so aus

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

und nmap sagt es mir

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

meine /etc/postfix/main.cf sieht so aus

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

Die * .pem-Dateien wurden wie im obigen Tutorial beschrieben mit erstellt

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

Ich glaube, ich muss /etc/dovecot/dovecot.conf hier nicht einschließen , da die Anmeldung über imaps und pop3s entsprechend den Protokollen gut funktioniert. Das einzige Problem ist, dass Postfix die selbst erstellten, selbst signierten Zertifikate ordnungsgemäß verwendet.

Jede Hilfe dankbar!

BEARBEITEN: Ich habe gerade dieses andere Tutorial zum Generieren eines selbstsignierten Zertifikats für Postfixausprobiert, wobei immer noch derselbe Fehler auftritt. Ich weiß wirklich nicht, was ich sonst noch testen soll.

Ich habe auch nach den SSL-Bibliotheken gesucht, aber alles scheint in Ordnung zu sein:

  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)

Nach Ansgar Wiechers Anweisungen ist es endlich soweit.

postconf -nenthielt die Zeilen, wie es sollte. Die Zertifikat- / Schlüsselüberprüfung über openssl hat ergeben, dass beide Dateien gültig sind.

Es war also tatsächlich ein Berechtigungsproblem! Wusste nicht, dass es nicht ausreicht, die Dateien /etc/ssl/*/postfix.pem nach postfix zu verschieben: postfix ist nicht ausreichend, damit postfix die Dateien liest.

Puh
quelle

Antworten:

16

Der Inhalt von main.cfmuss nicht unbedingt Ihre aktive Postfix-Konfiguration darstellen. Überprüfen Sie die Ausgabe von postconf -nfür die folgenden zwei Parameter:

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

Wenn $mynetworksauf localhost und beschränkt $smtpd_recipient_restrictionszeigt , permit_mynetworks, permit_sasl_authenticated, reject_unauth_destinationwie die ersten drei Einschränkungen, dann sind Sie nicht ein offenes Relay.

Stellen Sie sicher, dass /etc/ssl/private/postfix.pemein gültiger Schlüssel und /etc/ssl/certs/postfix.pemein gültiges Zertifikat enthalten sind:

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

Sie müssen auch prüfen, ob Postfix auf die Datei zugreifen kann. Auf meinem Server, auf die Berechtigungen /etc/ssl/privatesind

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

Daher chownhilft es Ihnen nicht, die Schlüsseldatei einfach nur zu speichern, da Postfix aufgrund der Verzeichnisberechtigungen nicht auf die darin enthaltenen Dateien zugreifen kann.

Versuchen Sie, das Setup zu vereinfachen. Zertifikat und Schlüssel in einer einzigen Datei ablegen:

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

und ändere deine main.cfso:

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

Starten Sie Postfix neu und prüfen Sie, ob der Server auf den Schlüssel zugreifen kann.

Ansgar Wiechers
quelle
Das hat das Problem behoben. Vielen Dank, Ladadadada und Ansgar Wiechers .
Puh
Danke für den postconf -nTeil. Das Kopieren und Einfügen führte zu einer Cert-Datei und einem nicht zugehörigen Schlüssel. Wenn ich mich auf die Ausgabe dieser Datei konzentrierte, konnte ich den Tippfehler in der Konfigurationsdatei sehen, den ich bereits überprüft, aber verpasst hatte ...
Adam Kerz
2

Diese Anweisungen haben chmod o= /etc/ssl/private/postfix.pemaber nichts darüber zu sagen, welchem ​​Benutzer die Datei gehört.

Auf meinen Boxen smtpdläuft der Prozess als postfixBenutzer. Überprüfen Sie, ob der postfixBenutzer darauf zugreifen kann /etc/ssl/private/postfix.pem. Oder vielleicht einfach chown postfix:postfix /etc/ssl/private/postfix.pem.

Das andere offensichtliche Problem ist genau das, was die Fehlermeldung besagt: In dieser Datei befindet sich kein gültiger RSA-Schlüssel. Schauen Sie rein /etc/ssl/private/postfix.pemund stellen Sie sicher, dass es mindestens etwas enthält, das aussieht wie ein RSA-Schlüssel. Fügen Sie es nicht in Ihre Frage ein.

Eigentlich ist mir gerade aufgefallen, dass die Fehlermeldung dafür /etc/ssl/certs/postfix.pemnicht steht /etc/ssl/private/postfix.pem. Überprüfen Sie auch das Eigentum, die Berechtigungen und den Inhalt von /etc/ssl/certs/postfix.pem.


Diese Fehlermeldung ist etwas verwirrend. Es heißt cannot get RSA private key from file /etc/ssl/certs/postfix.pemaber der private Schlüssel sollte drin sein /etc/ssl/private/postfix.pem. Ich habe nicht genug Erfahrung mit Postfix mit TLS, um zu wissen, ob es sich um einen Postfix-Fehler oder um einen Fehler in Ihrer Konfiguration handelt.

Ladadadada
quelle
Ich habe beide Dateien auf postfix umgestellt: postfix und dann postfix neu gestartet, aber der Versuch, eine E-Mail zu senden, reproduziert immer noch den Fehler in /var/log/mail.log
phew 28.09.12
root @ domain: /etc/ssl/certs #ls -l postfix.pem -rw-r - r-- 1 postfix postfix 1363 Sep 28 16:36 postfix.pem und es scheint Zertifikatinhalt zu enthalten, beginnend mit - --- ZERTIFIKAT BEGINNEN ----- enthält Daten bis -----
ZERTIFIKAT BEENDEN
Darüber habe ich mich auch gewundert, also habe ich versucht, die Dateien auszutauschen. Dies macht jedoch keinen Sinn, da die Datei in / certs / den Zertifikat-Header "---- BEGIN CERTIFICATE -----" enthält. Trotzdem vielen Dank für Ihre Hilfe.
Puh
1

Cert muss mit key übereinstimmen, hatte in meinem Fall nichts mit Berechtigungen zu tun

Erstellen Sie ein selbstsigniertes Zertifikat und einen selbstsignierten Schlüssel https://msol.io/blog/tech/create-a-self-signed-ssl-certificate-with-openssl/

Hoffe das hilft

user397245
quelle
Wäre es nicht besser, ein kostenloses Lets-Encrypt-Zertifikat zu verwenden?
Küken
Doh, danke! Kopieren und Einfügen ergab eine Zertifikatsdatei und einen nicht zugehörigen Schlüssel.
Adam Kerz
0

Stellen Sie sicher, dass der Schlüssel keine Passphrase enthält. Sie können es mit entfernen

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

wenn sie zusammen benutzt werden

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

Die Passphrase zeigt in den Protokollen eine Warnung an, dass der private RSAA-Schlüssel nicht abgerufen werden konnte, wodurch die TLS-Unterstützung deaktiviert wird. Hoffe das hilft jemandem!

user419756
quelle