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

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

SSL routines:tls_setup_handshake:no protocols available

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

  • error:0A0000BF:SSL routines::no protocols available

CLI-утилита openssl (3.0 и 3.5) выводит «error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available»; приложения, которые форматируют ошибки без имени функции, показывают «error:0A0000BF:SSL routines::no protocols available».

OpenSSL (client or server side) — SSL_R_NO_PROTOCOLS_AVAILABLE before the handshake starts

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

OpenSSL отказался даже начинать рукопожатие: после применения всех ограничений не осталось ни одной версии протокола, которую можно было бы предложить. Обычно приложение запросило TLS 1.0 или 1.1, а уровень безопасности OpenSSL (в современных дистрибутивах по умолчанию 2) их запрещает, либо заданная минимальная версия выше максимальной. На сервер ничего не отправлялось.

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

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

  1. 1.

    Найдите ограничивающую настройку

    Посмотрите, какие значения MinProtocol, MaxProtocol и @SECLEVEL в CipherString заданы в openssl.cnf и в системной криптографической политике.

    bash
    openssl version -d                                  # where openssl.cnf lives
    grep -nE 'MinProtocol|MaxProtocol|CipherString' /usr/lib/ssl/openssl.cnf /etc/ssl/openssl.cnf 2>/dev/null
    update-crypto-policies --show 2>/dev/null           # RHEL/Fedora system policy
  2. 2.

    Старое устройство: понизьте уровень для одной команды

    Если добавить @SECLEVEL=0 в строку шифров, TLS 1.0/1.1 снова включатся только для этого запуска. Не переносите такие исключения в общесистемную конфигурацию и не используйте их в недоверенных сетях.

    bash
    # For a one-off test against a legacy device: lower the security level for this command only
    echo | openssl s_client -connect legacy.example.com:443 -tls1 -cipher 'DEFAULT:@SECLEVEL=0'
  3. 3.

    Задайте согласованный диапазон версий

    Убедитесь, что минимальная версия не выше максимальной; сегодня обычный диапазон — от TLS 1.2 до TLS 1.3.

    ini
    # openssl.cnf (system_default_sect): a consistent range
    MinProtocol = TLSv1.2
    MaxProtocol = TLSv1.3

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

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