stream_socket_client (): операция SSL завершилась неудачно с кодом 1

Недавно я обновил сервер с Ubuntu 16.04 до 20.04, и после обновления я получаю следующую ошибку при попытке отправить почту через SMTP или при попытке подключиться к ведро S3 с PHP 7.0.

stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14161044:SSL routines:state_machine:internal error

Попробовав все решения по обмену стеками, мне не повезло. Я пробовал добавить в свой openssl.cnf следующее:

openssl_conf = default_conf

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1

Однако это не помогло, и я все еще получаю эти ошибки.

Любая помощь будет принята с благодарностью.

0
задан 5 May 2021 в 20:37
1 ответ

Я столкнулся с этой проблемой в PHPMailer после перехода с php 5.5 на php 5.6. Проблема связана с версией TLS по умолчанию, используемой openssl. Я не эксперт в openssl, но вот решение, которое сработало для меня.

Ошибка, зарегистрированная в моем журнале ошибок php:

PHP Warning:  stream_socket_enable_crypto(): SSL operation failed with code 1. OpenSSL Error messages:\nerror:14161044:SSL routines:state_machine:internal error in /var/www/XXXXXX/XXXXXX/PHPMailer/class.smtp.php on line 319

Код в строке 319 файла class.smtp.php в PHPMailer использует crypto_type STREAM_CRYPTO_METHOD_TLS_CLIENT,

if (! stream_socket_enable_crypto ( $this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLS_CLIENT )) {
  return false;
}

я изменил crypto_type от STREAM_CRYPTO_METHOD_TLS_CLIENT до STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT, см. документацию php для доступных криптотипов https://www.php.net/manual/en/function.stream-socket-enable-crypto.php

if (! stream_socket_enable_crypto ( $this->smtp_conn, true, STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT )) {
 return false;
}

Это изменение решило мою ошибку. Я не уверен, возникла ли эта проблема из-за обновления OpenSSL (с OpenSSL 1.0.1f до OpenSSL 1.1.1f) или PHP (с PHP 5.5.9 до PHP 5.6.4)

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

  1. Я попытался установить следующее в PHPMailer, это не сработало
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => false,
        'verify_peer_name' => false,
        'allow_self_signed' => true,
        'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
    )
);
  1. Также я добавил следующее в свой openssl.cnf, это тоже не сработало
openssl_conf = default_conf 

[default_conf]
ssl_conf = ssl_sect

[ssl_sect]
system_default = system_default_sect

[system_default_sect]
MinProtocol = TLSv1.2
CipherString = DEFAULT:@SECLEVEL=1
0
ответ дан 6 June 2021 в 13:10

Теги

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