Исправить 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 сертификаты, но ошибка остаётся.

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

ps

В конфиге swiftmailer-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,
        ]);
    },

Попробовал удалить устаревший swiftmailer и установил symfonymailer

'mailer' => function () {
        if (getenv('APP_DEBUG')) {
            $transport = [
                'scheme' => 'smtp',
                'host'       => 'mailer',
                'port'       => 1025,
                'username'   => '',
                'password'   => '',
                'encryption' => '',
            ];
        } else {
            $transport = [
                'scheme' => 'smtp',
                'host'       => Yii::$app->settings->get(Settings::SMTP_HOST),
                'port'       => (int)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)
            ];
        }

        return Yii::createObject([
            'class' => Mailer::class,
            'useFileTransport' => false,
            //'htmlLayout' => '@common/mail/layouts/html',
            'viewPath' => '@common/mail',
            'transport' => $transport,
        ]);

Ошибка таже

stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages: error:0A000086:SSL routines::certificate verify failed - /app/vendor/symfony/mailer/Transport/Smtp/Stream/SocketStream.php line: 171

Какие сертификаты требуется обновлять и где именно?


Ответы (0 шт):