Перейти к содержимому
ecdsa.com
curl (OpenSSL backend)curl

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

curl: (35) TLS connect error: error:0A00042E:SSL routines::tlsv1 alert protocol version

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

  • curl: (35) error:0A00042E:SSL routines::tlsv1 alert protocol version
  • curl: (35) error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version

Последние версии curl добавляют перед причиной от OpenSSL «TLS connect error: ». OpenSSL 1.1.1 указывает функцию: «error:1409442E:SSL routines:ssl3_read_bytes:tlsv1 alert protocol version». Если же сервер выбирает версию, которую отвергает клиент, клиент сообщает «unsupported protocol».

curl (OpenSSL backend) — CURLE_SSL_CONNECT_ERROR, TLS alert 70 (protocol_version) received from the server

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

Сервер отправил оповещение TLS 70 (protocol_version): ни одна из версий TLS, которые предложил curl, ему не подходит. Префикс «tlsv1» — лишь имя, которое OpenSSL даёт оповещениям, определённым начиная с TLS 1.0, а не используемая версия. Обычно сервер застрял на TLS 1.0/1.1, а клиент предлагает 1.2 и 1.3, или же максимальная версия клиента ограничена ниже минимальной версии сервера.

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

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

  1. 1.

    Выясните, какие версии принимает сервер

    Попробуйте каждую версию через openssl s_client. Результат покажет, что исправлять: сервер (принимаются только tls1/tls1_1) или клиент (он ни разу не предложил версию, которую принимает сервер).

    bash
    for v in tls1 tls1_1 tls1_2 tls1_3; do
      printf '%s: ' "$v"
      openssl s_client -connect api.example.com:443 -servername api.example.com -"$v" </dev/null >/dev/null 2>&1 \
        && echo accepted || echo refused
    done
  2. 2.

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

    Обновите конфигурацию TLS (а при необходимости и TLS-библиотеку или операционную систему), чтобы сервер принимал TLS 1.2 и 1.3.

    text
    # nginx
    ssl_protocols TLSv1.2 TLSv1.3;
    # HAProxy (global section)
    ssl-default-bind-options ssl-min-ver TLSv1.2
  3. 3.

    Снимите ограничения версии на клиенте

    Удалите --tls-max и старые флаги протокола из скриптов и .curlrc; задавайте только минимальную версию, чтобы curl мог согласовать самую высокую версию, которую поддерживают обе стороны.

    bash
    grep -nE 'tls-max|tlsv1|sslv3' ~/.curlrc   # a forgotten cap in the config file
    curl --tlsv1.2 https://api.example.com/        # minimum 1.2, no maximum

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

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