PHP - Swiftmailer verwendet STARTTLS und selbstsignierte Zertifikate

8

Ich versuche, eine E-Mail mit PHP und Swiftmailer zu senden, indem ich STARTTLS verwende, aber ich erhalte einen Zertifikatfehler. Ich habe Root-Zugriff auf den SMTP-Server und das verwendete Zertifikat ist selbstsigniert. Ich benutze Debian auf beiden Maschinen (Webserver und SMTP-Server)

PHP message: PHP 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 in [..]/lib/classes/Swift/Transport/StreamBuffer.php on line 97 PHP message: PHP Fatal error: Uncaught exception 'Swift_TransportException' with message 'Unable to connect with TLS encryption' in [..]/lib/classes/Swift/Transport/EsmtpTransport.php:294

Muss ich mein eigenes Zertifikat irgendwo hinzufügen, damit es akzeptiert wird? Oder ist das ein OpenSSL Konfigurationsfehler?

    
David Ventura 12.11.2014, 20:48
quelle

3 Antworten

10

Swiftmailer wurde jetzt aktualisiert, um eine Option dafür zu enthalten. Es kann jetzt mit der setStreamOptions -Methode von Ihrer Swift_SmtpTransport -Instanz gelöst werden, anstatt die swift-Klasse zu bearbeiten.

%Vor%     
Dave Kennard 12.01.2016, 15:37
quelle
12

Ich habe das gleiche Problem mit Swiftmailer in Laravel.

Sieht so aus, als gäbe es keine Möglichkeit dafür in Swiftmailer. Eine saubere Lösung wäre es, eine eigene Root-CA zu Ihrem Server hinzuzufügen und Ihr Mail-Server-Zertifikat mit dieser CA zu signieren. Das Zertifikat wäre danach gültig. Siehe zum Beispiel dieses Tutorial .

Wie auch immer, ein schneller schmutziger Hack, den Sie nicht verwenden sollten, wäre swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php zu bearbeiten. In _establishSocketConnection() Zeile 253 ersetzen:

%Vor%

mit etwas wie diesem:

%Vor%

Dies wird die SSL-Optionen von stream_context_create () (ein paar Zeilen unter $options ):

%Vor%     
PiTheNumber 24.11.2014 14:04
quelle
4

Sie müssen /vendor Dateien nicht bearbeiten. Sie können (undokumentierte) Optionen in Ihrer config/mail.php -Datei angeben:

%Vor%

Sie können es selbst überprüfen in vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php in Zeile ~ 50:

%Vor%     
Alex 21.12.2016 16:47
quelle