как исправить stream socket enable crypto (): сбой операции SSL с кодом 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

Im с помощью Laravel 4.2, PHP 5.6, Apache 2.4

у меня у GoDaddy SSL, установленный в Amazon EC2 в Линукс.

SSL работает нормально, когда я посещаю сайт с https.

ошибка произошла, когда я вызываю свою функцию:

<?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' );
        } );

}
?>

Я прочитал несколько статей об этом, они сказали, что есть вещи, которые мы должны внести некоторые изменения, они поставили этот код, но я не знаю, куда его вставить.

читал это: https://www.mimar.rs/en/sysadmin/2015/php-5-6-x-ssltls-peer-certificates-and-hostnames-verified-by-default/

и эта документация php http://php.net/manual/en/migration56.openssl.php что трудно понять.

Итак, мой вопрос, как решить эту проблему?

6 ответов


вы должны добавить ниже код в / config / mail.php (протестирован и работал на laravel 5.1, 5.2, 5.4 )

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

Примечание редактора: отключение проверки SSL имеет последствия для безопасности. без проверки подлинности соединений SSL/HTTPS злоумышленник может олицетворять доверенную конечную точку (например, GitHub или какой-либо другой удаленный хост Git), и вы будете уязвимы для человек-в-середине Атака. убедитесь, что вы полностью понимаете вопросы безопасности, прежде чем использовать это в качестве решения.


у меня также есть эта ошибка в laravel 4.2 я решил так. Узнайте StreamBuffer.php. Для меня я использую xampp, и мое имя проекта-itis_db для этого мой путь таков. Поэтому попробуйте найти в соответствии с вашим one

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

и узнайте эту функцию внутри StreamBuffer.в PHP

private function _establishSocketConnection()

и вставить эти две строки внутри этой функции

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

Примечание редактора: отключение проверки SSL имеет последствия для безопасности. без проверки подлинности соединений SSL/HTTPS злоумышленник может олицетворять доверенную конечную точку (например, GitHub или какой-либо другой удаленный хост Git), и вы будете уязвимы для человек-в-середине атаки. убедитесь, что вы полностью понимаете проблемы безопасности, прежде чем использовать это как решение.

и перезагрузите браузер и попробуйте снова запустить свой проект. Для меня я надеваю вот так:--5-->

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;
}

надеюсь, вы решите эту проблему.....


попробуйте изменить app/config/email.php

smtp to mail


простое исправление для этого может быть редактирование config / mail.php и отключение TLS

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

в основном делая это

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

вы также должны потерять безопасность, но в первом варианте нет необходимости погружаться в код поставщика.

Примечание редактора: как сказал автор: отключение проверки SSL имеет последствия для безопасности. без проверки подлинности соединений SSL / HTTPS, a злоумышленник может олицетворять доверенную конечную точку (например, GitHub или какой-либо другой удаленный узел Git), и вы будете уязвимы для человек-в-середине атаки. убедитесь, что вы полностью понимаете вопросы безопасности, прежде чем использовать это в качестве решения.


чтобы решить эту проблему, вам сначала нужно проверить SSL-сертификаты хоста, к которому вы подключаетесь. Например, используя ssllabs или другие инструменты ssl. В моем случае промежуточный сертификат был неправильный.

если сертификат в порядке, убедитесь, что OpenSSL на вашем сервере. Запустить openssl -v чтобы проверить вашу версию. Возможно, ваша версия является старой для работы с сертификатом.

в очень редких случаях вы можете отключить функции безопасности ssl, такие как verify_peer, verify_peer_name или allow_self_signed. Пожалуйста, будьте очень осторожны с этим и никогда использовать это в производстве. Это только вариант для временного тестирования.


чтение app/config / mailphp

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

в зависимости от почтовых утилит, установленных на вашем компьютере, заполните значение ключа драйвера. Я бы сделал

'driver' => 'sendmail',