Roundcube & Postfix SMTP: SSL-Routinen: SSL3_READ_BYTES: tlsv1-Warnung unbekannt ca: s3_pkt.c

11

Ich habe ein Postfix / Dovecot / Roundcube-Setup, das ich persönlich verwende und anderen Benutzern zur Verfügung stelle. Ich versuche, das gesamte Setup auf eine neue Box zu übertragen, habe jedoch einige Probleme.

Der Empfang von E-Mails funktioniert einwandfrei (nur intern getestet, Domain wird noch nicht übertragen.) Sowie externes IMAP und SMTP funktionieren hervorragend mit TLS / SSL (z. B. Thunderbird).

Das Problem liegt in meinem Roundcube-Setup, das IMAP bis 127.0.0.1 verwenden kann und die E-Mails des Benutzers wunderbar anzeigt, aber keine E-Mails senden kann. "SMTP Error (220): Authentication failed."

Seltsamerweise kann Roundcube mit derselben Postfix / Dovecot-Konfiguration, die ich auf meinem aktuellen Server verwendet habe, auf meinem neuen Server nicht mehr darauf zugreifen. Hier ist die relevante Roundcube-Konfiguration:

$config['smtp_server'] = 'tls://localhost';

// Log SMTP conversation to <log_dir>/smtp or to syslog
$config['smtp_debug'] = true;

// SMTP port (default is 25; use 587 for STARTTLS or 465 for the
// deprecated SSL over SMTP (aka SMTPS))
$config['smtp_port'] = 587;

// SMTP username (if required) if you use %u as the username Roundcube
// will use the current username for login
$config['smtp_user'] = '%u';

// SMTP password (if required) if you use %p as the password Roundcube
// will use the current user's password for login
$config['smtp_pass'] = '%p';

Das Protokoll / Fehlerprotokoll von Roundcube sagt einfach:

[02-Jan-2015 16:55:49 America/New_York] STARTTLS failed (): 
[02-Jan-2015 16:55:49 -0500]: SMTP Error: SMTP error: Authentication failure: STARTTLS failed (Code: ) in /var/wwwmail/program/lib/Roundcube/rcube.php on line 1505 (POST /?_task=mail&_unlock=loading1420235752730&_lang=undefined&_framed=1?_task=mail&_action=send)

Während Roundcubes Protokolle / SMTP-Protokoll Folgendes anzeigen:

[02-Jan-2015 17:50:01 -0500]: Recv: 220 example.net ESMTP Postfix
[02-Jan-2015 17:50:01 -0500]: Send: EHLO example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-example.net
[02-Jan-2015 17:50:01 -0500]: Recv: 250-PIPELINING
[02-Jan-2015 17:50:01 -0500]: Recv: 250-SIZE 104857600
[02-Jan-2015 17:50:01 -0500]: Recv: 250-VRFY
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ETRN
[02-Jan-2015 17:50:01 -0500]: Recv: 250-STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 250-ENHANCEDSTATUSCODES
[02-Jan-2015 17:50:01 -0500]: Recv: 250-8BITMIME
[02-Jan-2015 17:50:01 -0500]: Recv: 250 DSN
[02-Jan-2015 17:50:01 -0500]: Send: STARTTLS
[02-Jan-2015 17:50:01 -0500]: Recv: 220 2.0.0 Ready to start TLS
[02-Jan-2015 17:50:01 -0500]: Send: RSET
[02-Jan-2015 17:50:01 -0500]: Recv: M I A…"qhçR¸
[02-Jan-2015 17:50:01 -0500]: Send: QUIT

Hier sind die relevanten Ausschnitte meiner Postfix-Konfiguration aus /etc/postfix/main.cf

# TLS parameters for SMTP service
smtpd_tls_security_level    = may
smtpd_tls_cert_file         = /etc/ssl/private/example.net/example.net.crt
smtpd_tls_key_file          = /etc/ssl/private/example.net/example.net.key
smtpd_tls_auth_only         = yes

Hier sind die relevanten Ausschnitte meiner Postfix-Konfiguration aus /etc/postfix/master.cf

smtp      inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
submission inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o cleanup_service_name=cleanup_submit
smtps     inet  n       -       -       -       -       smtpd
  -o content_filter=spamassassin
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Das Postfix-Protokoll /var/log/mail.logmeldet die folgenden Fehler:

Jan  2 17:50:01 example postfix/submission/smtpd[19959]: connect from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: SSL_accept error from localhost.localdomain[127.0.0.1]: 0
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: warning: TLS library problem: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca:s3_pkt.c:1292:SSL alert number 48:
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: lost connection after STARTTLS from localhost.localdomain[127.0.0.1]
Jan  2 17:50:01 example postfix/submission/smtpd[19959]: disconnect from localhost.localdomain[127.0.0.1]

Ich habe einige andere Fragen mit ähnlichen Fehlercodes gelesen, aber alle scheinen entweder selbstsignierte Zertifikate zu verwenden oder einen Link zum Hash des Zertifikats aus / etc / ssl / certs / hinzuzufügen , den ich versucht habe, obwohl ich es getan habe Möglicherweise haben Sie das falsche Zertifikat falsch verstanden und verknüpft.

Roundcube wurde auf 1.0.4 aktualisiert, wodurch ein Problem mit der Inkompatibilität der PHP-Version aufgrund von openssl behoben werden sollte. Ich habe keine Ideen mehr, hat jemand irgendwelche Ideen?

1n5aN1aC
quelle
1
Ist das System auf dem neuesten Stand?
Michael Hampton
Ja. Entschuldigung, ich habe oben vergessen zu erwähnen, dass dies ein kürzlich installiertes Debian-Jessie-System ist, auch keine ausstehenden Upgrades.
1n5aN1aC

Antworten:

11

Die obige Fehlermeldung sieht so aus, als ob ein Client (von Roundcube aufgerufenes PHP-Skript) das Peer-Zertifikat aufgrund einer unbekannten Zertifizierungsstelle nicht überprüfen kann . Es gibt viele Gründe, warum dieser Fehler aufgetreten ist.

In Bezug auf openssl, Roundcube Version 1.0-RC und später mit SSL-Verbindungsoption ausgeliefert. Parameter smtp_conn_optionsund imap_conn_optionswurde in Version 1.0-RC bzw. 1.0.3 hinzugefügt. Standardmäßig war der Wert beider Parameter null. Das folgende Snippet wurde aus der Roundcube-Datei entnommen config/defaults.inc.php. Eine vollständige Beschreibung dieses Parameters finden Sie im PHP-Handbuch .

// SMTP socket context options
// See http://php.net/manual/en/context.ssl.php
// The example below enables server certificate validation, and
// requires 'smtp_timeout' to be non zero.
// $config['smtp_conn_options'] = array(
//   'ssl'         => array(
//     'verify_peer'  => true,
//     'verify_depth' => 3,
//     'cafile'       => '/etc/openssl/certs/ca.crt',
//   ),
// );
$config['smtp_conn_options'] = null;

In vielen Systemen, die ein selbstsigniertes Zertifikat verwenden, funktioniert der Standardwert für PHP 5.5 und früher. Standardmäßig überprüft PHP 5.6 das Peer-Zertifikat anhand der installierten Zertifizierungsstelle und den Peer-Namen .

Nun sieht es so aus, als ob Debian Jessie auch mit der Standard-PHP-Version 5.6 ausgeliefert wurde . Anscheinend kann PHP das Postfix-Zertifikat nicht überprüfen. Die möglichen Gründe, warum PHP in verify_peer_name (weil Sie localhost im Hostnamen angeben) oder in verify_peer (weil CA unbekannt war) fehlschlägt.


Ein ähnlicher Fall war auch bei Arch Linux-Benutzern aufgetreten . Die Lösung war entweder:

  • Installieren Sie das CA-Zertifikat im Verzeichnis openssl cert
  • Ändern Sie in der Option roundcube smtp_server localhost in Postfix FQDN (Lösung von OP).
  • Deaktivieren Sie verify_peer und / oder verify_peer_name in smtp_conn_options
masegaloeh
quelle
2
Vielen Dank! Es stellte sich heraus, dass eine einfache Änderung, bei der Roundcube angewiesen wurde, den vollqualifizierten Domänennamen anstelle von localhost zu verwenden, sofort behoben wurde! Ich wünschte, ich hätte gewusst, dass PHP diese Einstellungen schon einmal geändert hat!
1n5aN1aC
1

PHP 5.6 führt eine SSL-Peer-Überprüfung durch, dh es überprüft das Zertifikat des SMTP-Servers, ob es sich um eine bekannte Zertifizierungsstelle handelt.

Die Option smtp_server muss mit dem CN-Feld des Zertifikats übereinstimmen! (Gemeinsamen Namen)

Geben Sie also nicht localhost ein, sondern den vollständigen qualifizierten Domainnamen, der Ihrem Zertifikat entspricht.

Credits an: https://www.blogobramje.nl/posts/Roundcube_sending_mail_broken_with_PHP_5.6_-_STARTTLS_failed/

jmikii
quelle
0

weil ich Taubenschlag benutze, bestand meine Lösung darin, das Ca zum hinzuzufügen /etc/dovecot/dovecot.conf

ssl_ca = </etc/ssl/ca.pem
Klaus
quelle
-2

Ich hatte den gleichen Fehler. Korrigieren Sie das Hinzufügen der CA-Datei in der Datei postfix main.cf. Der Standort in kann sein /etc/postfix/main.cf.

smtpd_tls_CAfile = /etc/postfix/cacert.pem
smtpd_tls_cert_file = /etc/postfix/foo-cert.pem
smtpd_tls_key_file = /etc/postfix/foo-key.pem

tsukuyomi3891
quelle
-2

gleiches Problem! Schnell eine schmutzige Problemumgehung: Ändern Sie in config / defaults.inc.php verify_peer in false.

$config['smtp_conn_options'] = array(
   'ssl'         => array(
     'verify_peer'  => false,
     'verify_depth' => 3,
     'cafile'       => '/etc/openssl/certs/ca.crt',
   ),
);

WARNUNG NUR zum Testen; NICHT FÜR DIE PRODUKTION Umgebungen

ranbit.one
quelle
1
Selbst mit der Warnung, die Sie eingegeben haben, ist dies keine gute Idee: Das OP weiß, dass das Problem mit SSL / TLS zusammenhängt, und das Deaktivieren von Zertifizierungsprüfungen führt dazu, dass die Dinge funktionieren, während ein Großteil der Sicherheit entfernt wird, die SSL / TLS bieten würde. Vielleicht wäre es für das OP nützlicher, durch Ihren Konfigurationsblock (möglicherweise mit verify_peer => true) zu gehen und zu erklären, worauf das cafilehinweisen sollte.
iwaseatenbyagrue