web-dev-qa-db-fra.com

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

GoDaddy SSL est installé sur Amazon ec2 Linux.

SSL fonctionne bien lorsque je visite le site avec https.

L'erreur s'est produite lorsque j'ai appelé ma fonction:

<?php

public function sendEmail() 
{
        \Mail::send ( 'emails.code.code', $data, function ($sendemail) use($email) {
            $sendemail->from ( '[email protected]', 'Me Team' );
            $sendemail->to ( $email, '' )->subject ( 'Activate your account' );
        } );

}
?>

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

Je lisais ceci: 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 qui est difficile à comprendre.

Ma question est donc de savoir comment résoudre ce problème?

28
user4612911

Essayez de changer le app/config/email.php

smtp à mail

17
user4634724

Vous devriez ajouter le code ci-dessous 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: la désactivation de la vérification SSL a des conséquences pour la sécurité. Sans vérification de l'authenticité des connexions SSL/HTTPS, un attaquant malveillant peut emprunter l'identité d'un point de terminaison approuvé (tel que GitHub ou un autre hôte Git distant), et vous serez donc vulnérable à un Homme au milieu Attaque . Assurez-vous de bien comprendre les problèmes de sécurité avant de vous en servir comme solution.

78
manoj yadav

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 de projet est itis_db car mon chemin est comme ça. Alors essayez de trouver en fonction de votre

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

et découvrez cette fonction dans StreamBuffer.php

private function _establishSocketConnection()

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: la désactivation de la vérification SSL a des conséquences pour la sécurité. Sans vérification de l'authenticité des connexions SSL/HTTPS, un attaquant malveillant peut emprunter l'identité d'un point de terminaison approuvé (tel que GitHub ou un autre hôte Git distant), et vous serez donc vulnérable à un Homme au milieu Attaque . Assurez-vous de bien comprendre les problèmes de sécurité avant de vous en servir comme solution.

et rechargez votre navigateur et essayez de relancer votre projet. Pour moi je mets comme ça:

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

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

Si le certificat est correct, assurez-vous que l'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 voudrez peut-être désactiver les fonctionnalités de sécurité SSL telles que verify_peer, verify_peer_name ou allow_self_signed. S'il vous plaît soyez très prudent avec ceci et jamais utilisez ceci en production. Ceci n'est qu'une option pour les tests temporaires.

1
PiTheNumber

pour Laravel 5.4  
pour gmail


dans .env fichier

MAIL_DRIVER=mail
MAIL_Host=mail.gmail.com
MAIL_PORT=587
MAIL_USERNAME=<username>@gmail.com
MAIL_PASSWORD=<password>
MAIL_ENCRYPTION=tls

dans config/mail.php

'driver' => env('MAIL_DRIVER', 'mail'),

'from' => [
    'address' => env(
        'MAIL_FROM_ADDRESS', '<username>@gmail.com'
    ),
    'name' => env(
        'MAIL_FROM_NAME', '<from_name>'
    ),
],
0
Pasindu Jayanath

Lecture app/config/mailphp

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

Selon les utilitaires de messagerie installés sur votre ordinateur, entrez la valeur de la clé de pilote. je ferais

'driver' => 'sendmail',
0
Shadrack Wattai