PHPMailer-SSL3 obtenir le certificat du serveur: vérification du certificat échoué
ont rencontré un problème où le courrier électronique devrait être envoyé à partir d'un serveur de courrier qui a auto-signé le certificat, l'erreur que je reçois est :
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 class.smtp.php on line 327.
quelqu'un A rencontré quelque chose de semblable?
EDIT:
j'ai aussi essayé de définir les paramètres stream_context (params: options de contexte SSL):
$options['ssl']['verify_peer'] = false;
$options['ssl']['verify_peer_name'] = false;
$options['ssl']['allow_self_signed'] = true;
pas de chance, il échoue toujours avec la même erreur que ci-dessus.
Merci.
4 réponses
PHP 5.6 introduit la vérification de certificat SSL, donc si votre configuration est cassée, elle échouera avec cette erreur. Vous devez corriger votre SSL, mais vous pouvez revenir à l'ancien comportement en mettant le SMTPOptions
propriété de ne pas vérifier les certificats:
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true
)
);
éditer la bibliothèque va à l'encontre de l'objectif des bibliothèques - et si vous faites comme le suggère la réponse de Kaf, votre code se brisera lorsque vous mettrez à niveau. Vraiment, ne faites pas cela.
de l'Éditeur remarque: désactiver la vérification SSL a implications en matière de sécurité. sans vérification de l'authenticité des connexions SSL/HTTPS, un attaquant malveillant peut se faire passer pour un endpoint de confiance (comme GitHub ou un autre hôte Git distant), et vous serez vulnérable à un Man-in-the-Middle Attack. assurez-vous de bien comprendre les problèmes de sécurité avant d'utiliser cela comme une solution.
j'ai le même problème. J'ai donc modifié le fichier de classe.SMTP.php dans la ligne 238:
public function connect($host, $port = null, $timeout = 30, $options = array()) {
if (count($options) == 0) {
$options['ssl'] = array('verify_peer' => false, 'verify_peer_name' => false, 'allow_self_signed' => true);
}
maintenant ça marche très bien!
note de l'Éditeur: désactiver la vérification SSL a implications en matière de sécurité. sans vérification de l'authenticité des connexions SSL/HTTPS, un attaquant malveillant peut se faire passer pour un endpoint de confiance (tel que GitHub ou un autre hôte Git distant), et vous serez vulnérable à Man-in-the-Middle Attack. assurez-vous de bien comprendre les problèmes de sécurité avant d'utiliser cela comme une solution.
j'ai eu le même problème. Il s'est avéré que ma configuration Postfix manquait le paramètre intermediates et Root certificates:
smtpd_tls_CAfile=/etc/ssl/certs/intermediate-root-bundle.crt
même si cette configuration Postfix a fonctionné pendant des années avec Outlook et Thunderbird, PHP était plus difficile et a échoué à la vérification SSL.
donc même si vous pourriez être tenté de pirater PHPMailer, s'il vous plaît ne le faites pas, et de corriger le problème sous-jacent.
je voulais juste mettre mes 2 cents puisque j'ai été à la recherche d'une solution pendant des jours jusqu'à ce que J'ai essayé la solution de Kaf et ça a fonctionné!! Merci @Kaf
de toute façon... Pour moi, PHPMailer fonctionnait bien jusqu'à ce que je décide de mettre à jour PHP en PHP5.6
des modifications ont été apportées pour ouvrir ssl en PHP 5.6. Voici les documents officiels:
http://php.net/manual/en/migration56.openssl.php
Dans la doc il est dit set verify_peer et verify_peer_name false
il suffit donc de suivre la réponse de Kaf et voir si cela fonctionne pour vous.
note de l'Éditeur: Le doc dit aussi que ce n'est pas recommandé! Désactiver la vérification SSL a implications en matière de sécurité. sans vérification de l'authenticité des connexions SSL/HTTPS, un attaquant malveillant peut se faire passer pour un endpoint de confiance (tel que GitHub ou un autre Git distant). de l'hôte), et vous serez vulnérable à un Man-in-the-Middle Attack. assurez-vous de bien comprendre les problèmes de sécurité avant d'utiliser cela comme une solution.