Перейти к содержимому
ecdsa.com
OpenSSL (client side)OpenSSL CLI

Сообщение об ошибке

SSL routines:ssl_choose_client_version:unsupported protocol

Также выводится как

  • error:0A000102:SSL routines::unsupported protocol

CLI-утилита openssl выводит «<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>»; curl, Node.js и другие приложения показывают «error:0A000102:SSL routines::unsupported protocol». OpenSSL 1.1.1 использовал код 1425F102.

OpenSSL (client side) — SSL_R_UNSUPPORTED_PROTOCOL: the server chose a version the client does not allow

Что это означает

Клиент предложил TLS 1.2 и 1.3, но в ServerHello сервер выбрал более старую версию (обычно TLS 1.0), а OpenSSL на клиенте её использовать не разрешено. Клиент прерывает рукопожатие в ssl_choose_client_version. Старые стеки TLS игнорируют предложенный клиентом диапазон и просто отвечают своей версией; современные стеки вместо этого отказали бы оповещением protocol_version.

Почему это происходит

Как исправить

  1. 1.

    Уточните версию сервера

    Если для этой одной диагностической команды принудительно задать TLS 1.0 на уровне безопасности 0, станет видно, умеет ли сервер только старую версию.

    bash
    # Allowed only for this diagnostic command: which version does the server pick?
    echo | openssl s_client -connect legacy.example.com:443 -servername legacy.example.com \
      -tls1 -cipher 'DEFAULT:@SECLEVEL=0' -brief 2>&1 | grep -E 'Protocol version|error'
  2. 2.

    Включите TLS 1.2 и 1.3 на сервере

    Единственное надёжное решение — обновить сервер (или поставить перед ним современный TLS-терминатор).

    text
    # Server side
    ssl_protocols TLSv1.2 TLSv1.3;     # nginx
    SSLProtocol -all +TLSv1.2 +TLSv1.3 # Apache httpd

Связанные ошибки

Открыть всю базу ошибок подписей