comment réparer stream socket enable crypto (): l'opération SSL a échoué avec le code 1

stream_socket_enable_crypto(): SSL operation failed with code 1. 
OpenSSL Error messages: error:14090086:SSL 
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

J'utilise Laravel 4.2, PHP 5.6, Apache 2.4

J'ai GoDaddy SSL installé dans Amazon ec2 Linux.

SSL fonctionne très bien lorsque je visite le site avec https.

L'erreur qui s'est passé lorsque j'appelle ma fonction :

<?php

public function sendEmail() 
{
        Mail::send ( 'emails.code.code', $data, function ($sendemail) use($email) {
            $sendemail->from ( 'info@me.com', 'Me Team' );
            $sendemail->to ( $email, '' )->subject ( 'Activate your account' );
        } );

}
?>

j'ai lu quelques articles à ce sujet, ils ont dit qu'il y a des choses que nous devrions faire quelques changements, ils ont mis ce code mais je ne sais pas où l'insérer.

Été la lecture de ce: https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/

et cette documentation de php http://php.net/manual/en/migration56.openssl.php ce qui est difficile à comprendre.

<!-Donc ma question est comment résoudre ce problème?

27
demandé sur Alex M 2015-05-31 14:19:10

6 réponses

vous devez ajouter ci-dessous le code dans /config/mail.php (testé et travaillé sur laravel 5.1, 5.2, 5.4)

'stream' => [
   'ssl' => [
      'allow_self_signed' => true,
      'verify_peer' => false,
      'verify_peer_name' => false,
   ],
],

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 (comme GitHub ou un autre hôte Git distant), et vous serez vulnérable à un homme-dans-le-milieu Attaque. assurez-vous de bien comprendre les problèmes de sécurité avant d'utiliser cela comme une solution.

71
répondu manoj yadav 2018-09-05 07:50:50

j'ai aussi cette erreur dans laravel 4.2 j'ai résolu comme ça. Découvrez StreamBuffer.php. Pour moi j'utilise xampp et mon nom est itis_db pour cela mon chemin, c'est comme cela. Alors essayez de trouver selon votre un

C:\xampp\htdocs\itis_db\vendor\swiftmailer\swiftmailer\lib\classes\Swift\Transport\StreamBuffer.php

et découvrez cette fonction à L'intérieur de StreamBuffer.php

private function _establishSocketConnection()

et coller ces deux lignes à l'intérieur de cette fonction

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;

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 (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.

et Rechargez votre navigateur et essayez d'exécuter votre projet à nouveau. Pour moi j'ai mis comme ceci:

private function _establishSocketConnection()
{
    $host = $this->_params['host'];
    if (!empty($this->_params['protocol'])) {
        $host = $this->_params['protocol'].'://'.$host;
    }
    $timeout = 15;
    if (!empty($this->_params['timeout'])) {
        $timeout = $this->_params['timeout'];
    }
    $options = array();
    if (!empty($this->_params['sourceIp'])) {
        $options['socket']['bindto'] = $this->_params['sourceIp'].':0';
    }

   $options['ssl']['verify_peer'] = FALSE;
    $options['ssl']['verify_peer_name'] = FALSE;

    $this->_stream = @stream_socket_client($host.':'.$this->_params['port'], $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, stream_context_create($options));
    if (false === $this->_stream) {
        throw new Swift_TransportException(
            'Connection could not be established with host '.$this->_params['host'].
            ' ['.$errstr.' #'.$errno.']'
            );
    }
    if (!empty($this->_params['blocking'])) {
        stream_set_blocking($this->_stream, 1);
    } else {
        stream_set_blocking($this->_stream, 0);
    }
    stream_set_timeout($this->_stream, $timeout);
    $this->_in = &$this->_stream;
    $this->_out = &$this->_stream;
}

J'espère que vous résoudrez ce problème.....

26
répondu Humaun Rashid 2018-09-05 07:51:23

Essayez de changer le app/config/email.php

smtpmail

16
répondu 2015-06-06 19:40:24

la solution facile pour cela pourrait être l'édition de config / mail.php et en éteignant les TLS

'encryption' => env('MAIL_ENCRYPTION', ''), //'tls'),

fondamentalement en faisant cela

$options['ssl']['verify_peer'] = FALSE;
$options['ssl']['verify_peer_name'] = FALSE;

vous devriez perdre la sécurité aussi, mais dans la première option il n'y a pas besoin de plonger dans le code du vendeur.

note de l'Éditeur: comme l'a dit l'auteur: 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 un attaquant malveillant peut se faire passer pour un point final de confiance (comme GitHub ou un autre hôte distant de Git), 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.

7
répondu monas 2018-09-05 07:52:21

Pour résoudre ce problème, vous devez d'abord vérifier que les certificats SSL de l'hôte de votre connexion. Par exemple, en utilisant ssllabs ou autres outils ssl. Dans mon cas, le certificat intermédiaire était erroné.

si le certificat est ok, assurez-vous que openSSL sur votre serveur est à jour. Exécutez openssl -v pour vérifier votre version. Peut-être que votre version est trop ancienne pour fonctionner avec le certificat.

dans de très rares cas, vous pourriez vouloir désactiver ssl des fonctionnalités de sécurité comme verify_peer, verify_peer_name ou allow_self_signed. S'il vous plaît être très prudent avec ce et jamais utilisez ceci dans la production. Ce n'est qu'une option pour les tests temporaires.

1
répondu PiTheNumber 2018-09-05 07:25:09

Lecture app/config/mailphp

Supported : "smtp", "mail", "sendmail"

selon les utilitaires de messagerie installés sur votre machine, saisissez la valeur de la clé du pilote. Je voudrais faire

'driver' => 'sendmail',
0
répondu Shadrack Wattai 2016-12-02 00:56:44