Перейти к содержимому
ecdsa.com
Go crypto/tls clientGo

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

tls: server selected unsupported protocol version 301

Число — код версии в шестнадцатеричном виде без префикса 0x: 300 = SSL 3.0, 301 = TLS 1.0, 302 = TLS 1.1. HTTP-клиенты добавляют префикс «Get \"https://…\": ». Сервер, поддерживающий только TLS 1.0 и построенный на актуальной библиотеке, не понижает версию, а отказывает, и тогда Go сообщает «remote error: tls: protocol version not supported» (так было при подключении к openssl s_server -tls1).

Go crypto/tls client — the server chose TLS 1.0 (0x0301) or 1.1 (0x0302), below Go's minimum

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

В ответ на ClientHello от Go сервер выбрал версию TLS, которую клиент Go не допускает: 301 — шестнадцатеричный код версии TLS 1.0, 302 — TLS 1.1. Клиенты Go по умолчанию (начиная с Go 1.18) требуют TLS 1.2 или новее, поэтому прерывают рукопожатие. Сервер должен поддерживать TLS 1.2+.

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

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

  1. 1.

    Обновите TLS на сервере

    Включите на сервере TLS 1.2 (и 1.3) или поставьте перед ним современный прокси, терминирующий TLS.

    text
    Upgrade the server (or the appliance firmware / TLS terminator in front of it) to TLS 1.2 or 1.3.
    0x0301 = TLS 1.0, 0x0302 = TLS 1.1, 0x0303 = TLS 1.2, 0x0304 = TLS 1.3.
  2. 2.

    Крайняя мера: отдельный клиент с MinVersion TLS 1.0

    Если понизить MinVersion в клиенте, который используется только для этого устаревшего устройства, связь восстановится. TLS 1.0 объявлен устаревшим (RFC 8996), и в нём нет современных механизмов защиты; держите такой трафик в доверенных сетях и никогда не задавайте эту настройку в общих транспортах.

    go
    // Last resort for one legacy device on a trusted network: a dedicated client
    legacy := &http.Client{Transport: &http.Transport{TLSClientConfig: &tls.Config{
    	MinVersion: tls.VersionTLS10, // only for this client; never in a shared transport
    }}}
    resp, err := legacy.Get("https://legacy.example.com:8443/")

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

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