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

Mensagem de erro

SSL routines:ssl_choose_client_version:unsupported protocol

Também aparece como

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

A CLI do openssl imprime “<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>”; o curl, o Node.js e outros aplicativos mostram “error:0A000102:SSL routines::unsupported protocol”. O OpenSSL 1.1.1 usava o código 1425F102.

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

O que significa

O cliente ofereceu TLS 1.2 e 1.3, mas o ServerHello do servidor escolheu uma versão mais antiga (normalmente TLS 1.0), que o OpenSSL do cliente não tem permissão para usar. O cliente aborta em ssl_choose_client_version. Pilhas TLS antigas ignoram a faixa oferecida pelo cliente e simplesmente respondem com a própria versão; pilhas modernas, em vez disso, recusariam com um alerta protocol_version.

Por que acontece

Como corrigir

  1. 1.

    Confirmar a versão do servidor

    Forçar o TLS 1.0 com nível de segurança 0, só neste comando de diagnóstico, mostra se o servidor fala apenas a versão antiga.

    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.

    Ativar TLS 1.2 e 1.3 no servidor

    Atualizar o servidor (ou colocar na frente dele um terminador TLS moderno) é a única correção duradoura.

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

Erros relacionados

Ver toda a base de erros de assinatura