Pular para o conteúdo
ecdsa.com
OpenSSL (client or server side)CLI do OpenSSL

Mensagem de erro

SSL routines:tls_setup_handshake:no protocols available

Também aparece como

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

A CLI do openssl (3.0 e 3.5) imprime “error:0A0000BF:SSL routines:tls_setup_handshake:no protocols available”; aplicações que formatam os erros sem o nome da função mostram “error:0A0000BF:SSL routines::no protocols available”.

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

O que significa

O OpenSSL se recusou até mesmo a iniciar o handshake porque, depois de aplicadas todas as restrições, não sobrou nenhuma versão do protocolo para oferecer. Normalmente a aplicação pediu TLS 1.0 ou 1.1 enquanto o nível de segurança do OpenSSL (2 por padrão nas distribuições atuais) os proíbe, ou a versão mínima configurada está acima da máxima. Nada foi enviado ao servidor.

Por que acontece

Como corrigir

  1. 1.

    Encontrar a configuração que impõe a restrição

    Procure no openssl.cnf e na política criptográfica do sistema os valores de MinProtocol, MaxProtocol e @SECLEVEL em CipherString.

    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.

    Dispositivo legado: reduzir o nível para um único comando

    Acrescentar @SECLEVEL=0 à string de cifras reativa o TLS 1.0/1.1 apenas nessa execução. Mantenha essas exceções fora da configuração de todo o sistema e longe de redes não confiáveis.

    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.

    Usar um intervalo de versões consistente

    Garanta que o mínimo não ultrapasse o máximo; o intervalo habitual hoje vai do TLS 1.2 ao TLS 1.3.

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

Erros relacionados

Ver toda a base de erros de assinatura