как исправить 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;
}
надеюсь, вы решите эту проблему.....
простое исправление для этого может быть редактирование 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',