slo_nik
@slo_nik

Как исправить error:0A000086:SSL?

Добрый вечер.

Есть проект на yii2 в котором надо настроить отправку почты. Задача простая, не раз делал, но сейчас возникла ошибка сертификата.

На сервере заказчика стоит vestacp c почтовым сервером (davecot, exim), сам проект находится на другом сервере.

Для тестирования настроил отправку через gmail - работает.

Сделал настройки на сервер заказчика, прописал smtp хост, порт, username, password, encryption которые предоставил заказчик. Отправка почты завершается ошибкой:

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


Если установить encryption в null, то почта будет приходить, но не всегда, на некоторые почтовики письма не доходят.

Проверил доступ к smtp заказчика командой

openssl s_client -connect smtp.host:587 -starttls smtp


ответ команды

No ALPN negotiated
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: **********
    Session-ID-ctx: 
    Master-Key: *********
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1720894738
    Timeout   : 7200 (sec)
    Verify return code: 10 (certificate has expired)
    Extended master secret: yes


Заказчик обновил сертификаты Let's Encrypt, но это не помогло.

Самостоятельный поиск решения не дал. На SO, Medium советуют обновить ca сертификаты, но ошибка остаётся.

Как решить проблему?

upd

В конфиге mailer-a дописал stremOptions, вроде заработало, но насколько такое решение верно?

'mailer' => function () {
             if (getenv('APP_DEBUG')) {
                 $transport = [
                     'class'      => 'Swift_SmtpTransport',
                     'host'       => 'mailer',
                     'port'       => 1025,
                     'username'   => null,
                     'password'   => null,
                     'encryption' => null
                 ];
             } else {
                $transport = [
                    'class'      => 'Swift_SmtpTransport',
                    'host'       => Yii::$app->settings->get(Settings::SMTP_HOST),
                    'port'       => Yii::$app->settings->get(Settings::SMTP_PORT),
                    'username'   => Yii::$app->settings->get(Settings::SMTP_USER),
                    'password'   => Yii::$app->settings->get(Settings::SMTP_PASSWORD),
                    'encryption' => Yii::$app->settings->get(Settings::SMTP_ENCRYPT),
                    'streamOptions' => [
                        'ssl' => [
                            'verify_peer' => false,
                            'verify_peer_name' => false,
                            'allow_self_signed' => true
                        ]
                    ]
                ];
            }

            return Yii::createObject([
                'class'            => 'yii\swiftmailer\Mailer',
                'useFileTransport' => false,
                'viewPath' => '@common/mail',
                'transport' => $transport,
            ]);
        },
  • Вопрос задан
  • 320 просмотров
Пригласить эксперта
Ответы на вопрос 1
nefone
@nefone
Junior PHP разработчик
Swift Mailer больше не поддерживается.
Можно попробовать использовать другой SmtpTransport, как вариант Symfony Mailer
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы