PHP - Swiftmailer utiliser STARTTLS et les certificats auto-signés
Je suis en train d'envoyer un mail avec php et swiftmailer, à l'aide de STARTTLS, mais j'obtiens une erreur de certificat. J'ai un accès root sur le serveur SMTP, et le certificat est auto-signé.
J'utilise Debian sur les deux machines (serveur web et serveur smtp)
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
Dois-je ajouter mes propres certificat de quelque part pour avoir accepté? Ou est-ce une erreur de configuration OpenSSL?
OriginalL'auteur David Ventura | 2014-11-12
Vous devez vous connecter pour publier un commentaire.
Swiftmailer a été mis à jour pour inclure une option pour cela. Il peut maintenant être résolu à l'aide de la
setStreamOptions
méthode de votreSwift_SmtpTransport
exemple, plutôt que la modification de la swift de la classe.Vous venez de faire un appel à setStreamOptions partout où il est dans votre code que vous êtes en train de créer le Swift_SmtpTransport instance. Si vous ne savez pas comment l'utiliser Swift Mailer, voir l'exemple ici: swiftmailer.org/docs/sending.html Suivre cet exemple, mais ajouter l'appel à setStreamOptions de la Swift_SmtpTransport instance.
C'est la pire chose que vous pouvez faire, désactivez tous les avantages de la sécurité TLS.
OriginalL'auteur Dave Kennard
J'ai eu le même problème à l'aide de Swiftmailer dans Laravel.
Regarde comme il n'y a pas d'option pour cela dans Swiftmailer. Nettoyer la solution serait d'ajouter votre propre autorité de certification racine à votre serveur et de signer votre serveur de messagerie certificat par cette autorité de certification. Le certificat sera valide après cette. Voir, par exemple,ce tutoriel.
De toute façon, un rapide sale hack vous ne devez pas utiliser serait de modifier
swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php
. Dans_establishSocketConnection()
ligne 253 remplacer:avec quelque chose comme ceci:
Cela va changer la options ssl de la fonction stream_context_create() (quelques lignes ci-dessous
$options
):OriginalL'auteur PiTheNumber
Vous n'avez pas besoin de modifier
/vendor
fichiers. Vous pouvez spécifier (sans-papiers) les options de votreconfig/mail.php
fichier:Vous pouvez le vérifier vous-même dans
vendor/laravel/framework/src/Illuminate/Mail/TransportManager.php
sur la ligne de ~50:OriginalL'auteur Alex