Предупреждение: stream_socket_enable_crypto (): операция SSL не выполнена с кодом 1

У меня проблема с CSCart, он не может отправить почту через аккаунт Google.
Чтобы проверить, есть ли проблема в конфигурации сервера или в сценариях CSCart, я установил чистую библиотеку PHPMailer и попытался отправить тестовое сообщение, используя пример сценария.
Результат тот же:

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 [script path]/class.smtp.php on line 338

OpenSSL соединение с консоли работает хорошо.

FreeBSD 10.0, Apache24, php5.6.

Я не смог найти какую-либо информацию в Google и на данный момент я даже не знаю, в каком файле конфигурации для поиска корня проблемы.

7

Решение

Это связано с новой политикой проверки по умолчанию в PHP 5.6. Это не установлено в php.ini; это опция, которую вы предоставляете для открытия упаковщиков или потоковых контекстов. Посмотрите на варианты Вот, особенно verify_peer, PHPMailer позволяет устанавливать эти параметры во время smtpConnect() метод, но нет возможности передать параметры в smtpSend() метод, так что вам нужно будет создать подкласс PHPMailer для этого.

Вы можете найти альтернативу проще — не пытайтесь использовать самоподписанный или непроверяемый сертификат.

4

Другие решения

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

  1. Проверьте, есть ли у вас файл cacert.pem для OPENSSL или нет. Если вы этого не сделаете, загрузите правильную версию из cacert.pem в соответствии с вашей версией php и настройте файл php.ini как «2»

  2. Если у вас есть этот файл, то вам нужно поискать внутри вашего файла php.ini и посмотреть, был ли он установлен в нем или нет. Для этого ищите строку:

    openssl.cafile ="example address..\cacert.pem"

Если вы найдете строку с конкретным адресом, поищите файл cacert.pem по этому адресу, если он найден, чем все это делается с файлом cacert.pem. Иначе, вы должны использовать правильный адрес.

1

в laRAVEL 5.4 ОШИБКА

C: \ XAMPP \ HTDOCS \ itis_db \ ​​поставщика \ SwiftMailer \ SwiftMailer \ Lib \ Классы \ Свифт \ Транспорт \ StreamBuffer.php

и выяснить эту функцию внутри StreamBuffer.php

private function _establishSocketConnection()

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

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

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

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

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

0
По вопросам рекламы [email protected]