Недавно я обновил сервер с 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
Однако это не помогло, и я все еще получаю эти ошибки.
Любая помощь будет принята с благодарностью.
Я столкнулся с этой проблемой в 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)
Я пробовал много других изменений, прежде чем обнаружил это решение. Таким образом, эти изменения, возможно, также способствовали моему окончательному решению.
$mail->SMTPOptions = array(
'ssl' => array(
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => true,
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT
)
);
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