Сообщение об ошибке
SSL routines:ssl3_read_bytes:tlsv1 alert protocol version
Также выводится как
- error:0A00042E:SSL routines::tlsv1 alert protocol version
- SSL alert number 70
И OpenSSL 3.0, и 3.5 выводят «error:0A00042E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version:<source>:SSL alert number 70»; OpenSSL 1.1.1 использовал код 1409442E. Клиенты на базе OpenSSL (curl, Python, Ruby, PHP) показывают тот же текст причины.
OpenSSL (client side) — TLS alert 70 (protocol_version) received from the server
Что это означает
Клиент получил от сервера оповещение TLS 70 (protocol_version): ни одна из версий протокола, которые предложил клиент, серверу не подходит. «tlsv1» — лишь имя семейства, которое OpenSSL использует для оповещений, определённых начиная с TLS 1.0. На практике сервер ограничен TLS 1.0/1.1, а клиент предлагает 1.2 и 1.3, либо клиенту оставили только версии, которые на сервере отключены.
Почему это происходит
Сервер поддерживает только TLS 1.0 или 1.1
частоУстаревшие специализированные устройства, старые серверы Windows/IIS или Java и устройства, которые ни разу не обновлялись.
Клиенту принудительно задана старая версия
иногдаФлаги вроде -tls1 или параметр MaxProtocol, забытый в конфигурации, заставляют клиент предлагать версии, которых современные серверы не принимают.
Сервер только с TLS 1.3 и клиент, ограниченный версией 1.2
иногдаЭндпоинты с усиленной защитой иногда принимают только TLS 1.3; старые клиенты к ним подключиться не могут.
Как исправить
- 1.
Выясните, какие версии принимает сервер
Попробуйте каждую версию явно (уровень безопасности 0 разрешает рукопожатия TLS 1.0/1.1 на основе SHA-1 только для этой проверки).
bash for v in tls1 tls1_1 tls1_2 tls1_3; do printf '%-7s ' "$v" echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com -"$v" \ -cipher 'DEFAULT:@SECLEVEL=0' >/dev/null 2>&1 && echo accepted || echo refused done - 2.
Включите TLS 1.2 и 1.3 на сервере
Обновите настройки протоколов на сервере (и его TLS-библиотеку, если она старше TLS 1.2).
text # nginx ssl_protocols TLSv1.2 TLSv1.3; # Apache httpd SSLProtocol -all +TLSv1.2 +TLSv1.3