it-swarm.com.de

PHPMailer generiert PHP Warnung: stream_socket_enable_crypto (): Peer-Zertifikat stimmt nicht mit dem erwarteten überein

Ich verwende PHPMailer auf PHP 5.6, die erhöhte Sicherheit, die in PHP 5.6 zertifiziert ist, macht auf jeden Fall Spaß.

Ich versuche, eine Testnachricht an eine auf Dreamhost gehostete Domäne zu senden. Der Fehler, der von PHPMailer zurückgegeben wird, lautet: Konnte keine Verbindung zum SMTP-Host herstellen.

Dieser Fehler ist nicht richtig, ich habe die Protokollierung aktiviert und hier ist das, was tatsächlich vor sich geht.

Verbindung: Öffnung zu mx1.sub4.homie.mail.dreamhost.com:25 , Timeout = 30, Optionen = Array () Verbindung: Geöffnet S: 220 homiemail-mx32.g.dreamhost.com ESMTP

C: EHLO s81a.ikbb.com

S: 250-homiemail-mx32.g.dreamhost.com 250-ROHRLEITUNG 250-GRÖSSE 40960000 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250 8BITMIME

C: STARTTLS

S: 220 2.0.0 Bereit zum Starten von TLS

C: QUIT

S: SMTP ERROR: QUIT-Befehl fehlgeschlagen: Verbindung: geschlossen

Ich konnte nicht verstehen, warum PHPMailer einfach aufgibt und einen QUIT-Befehl ausgibt, wenn die Nachricht gesendet werden soll. Ich habe einen weiteren Hinweis aus einem anderen Protokoll erhalten:

PHP Warnung: stream_socket_enable_crypto (): Peer-Zertifikat CN = *.mail.dreamhost.com' did not match expected CN=mx1.sub4.homie.mail.dreamhost.com 'in /home/ikbb/domains/dev.ikbb.com/public_html/includes/phpmailer/5.2.10/class.smtp .php

Wenn ich einige benutzerdefinierte Optionen verwende, um die Validierung des verwendeten Zertifikats zu verhindern, kann ich es weiterführen. Folgendes habe ich:

        $mail->SMTPOptions = array (
        'ssl' => array(
            'verify_peer'  => false,
            'verify_peer_name'  => false,
            'allow_self_signed' => true));

Wenn ich die SMTPOptions dort einsetze und die Peer-Überprüfung überspringe, wird die Nachricht in Ordnung - ohne Warnung in PHP.

Wie kann ich den Fehler beheben, so dass ich weiß, dass ein Problem vorliegt, die Nachricht aber trotzdem senden?

36
Rob Gunsuka

Ich hatte das gleiche Problem und fand die Antwort in der PHPMailer-Dokumentation .

PHP 5.6 Fehler bei der Zertifikatsüberprüfung

Bei einer Änderung gegenüber früheren Versionen überprüft PHP 5.6 Zertifikate auf SSL-Verbindungen. Wenn die SSL-Konfiguration des Servers, zu dem Sie eine Verbindung herstellen, nicht korrekt ist, erhalten Sie eine Fehlermeldung wie diese:

Warning: stream_socket_enable_crypto(): SSL operation failed with code 1.
OpenSSL Error messages: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Die korrekte Lösung besteht darin, das ungültige, falsch konfigurierte oder selbstsignierte Zertifikat durch ein gutes zu ersetzen. Andernfalls können Sie unsichere Verbindungen über die in PHPMailer 5.2.10 eingeführte SMTPOptions-Eigenschaft zulassen (dies ist durch Unterklassen der SMTP-Klasse in früheren Versionen möglich). Dies wird jedoch nicht empfohlen:

$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true
    )
);

Sie können diese Einstellungen auch global in Ihrer php.ini ändern, aber das ist eine wirklich schlechte Idee. PHP 5.6 hat diese Änderung aus sehr guten Gründen vorgenommen.

Manchmal ist dieses Verhalten nicht so offensichtlich; Manchmal treten Verschlüsselungsfehler auf, wenn der Client unmittelbar nach dem Versuch, ein STARTTLS auszuführen, ein QUIT ausstellt. In diesem Fall sollten Sie den Status Ihrer Zertifikate oder Überprüfungseinstellungen überprüfen.

66
Jesús Amieiro

Verwenden Sie für PHP 5.6 Folgendes. Das Hinzufügen von "tls: //" ist der Schlüssel. 

$mail->Host = gethostbyname('tls://smtp.gmail.com');

Siehe: http://php.net/manual/de/context.ssl.php

3
Chrisbot

Für diejenigen, die cPanel verwenden, habe ich den SMTP-Prüfcode aus dem Ordner "Examples" in PHPMailer ausprobiert und diesen Fehler erhalten:

PHP Warning: stream_socket_enable_crypto(): Peer certificate  CN=*.mail.dreamhost.com' did not match expected CN=mx1.sub4.homie.mail.dreamhost.com' in /home/ikbb/domains/dev.ikbb.com/public_html/includes/phpmailer/5.2.10/class.smtp.php

Mir wurde klar, dass es sich nicht um einen Fehler in Verbindung mit PHPMailer handelte, also suchte ich nach ähnlichen Fehlern in Bezug auf CentOS und ich fand diesen Link, der etwas Licht aufwirft: Problem beim Senden von E-Mails über Drittanbieter . Sie müssen einen Blick auf "SMTP-Einschränkungen" in cPanel werfen.

1
georch

Ich hatte ein ähnliches Problem, nachdem ich auf meiner WordPress-Maschine ein Upgrade auf PHP 5.6 durchgeführt hatte. Das WP Mail SMTP by WPForms-Plugin (wp-mail-smtp) wurde so konfiguriert, dass localhost als SMTP-Host verwendet wird. Ich habe es in FQHN (Fully Qualified Host Name) geändert, wie es im SSL-Zertifikat definiert ist. Nach dieser Änderung funktioniert es einwandfrei.

0
Sergey Vlasov