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?
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.
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:
mit etwas wie diesem:
%Vor% Dies wird die SSL-Optionen von stream_context_create () (ein paar Zeilen unter $options
):
Tags und Links php certificate smtp self-signed swiftmailer