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.

24
demandé sur Zayn Ali 2014-11-09 13:28:18

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.

84
répondu Synchro 2018-09-05 07:57:17

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.

20
répondu Kaf 2018-09-05 07:57:28

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.

2
répondu SurfMan 2017-03-10 14:54:25

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.

0
répondu alvinb 2018-09-05 07:59:16