Saltar al contenido
ecdsa.com
OpenSSL (client side)CLI de OpenSSL

Mensaje de error

SSL routines:ssl_choose_client_version:unsupported protocol

También se muestra como

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

La CLI de openssl imprime «<thread>:error:0A000102:SSL routines:ssl_choose_client_version:unsupported protocol:<source>»; curl, Node.js y otras aplicaciones muestran «error:0A000102:SSL routines::unsupported protocol». OpenSSL 1.1.1 usaba el código 1425F102.

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

Qué significa

El cliente ofreció TLS 1.2 y 1.3, pero el ServerHello del servidor eligió una versión más antigua (normalmente TLS 1.0), que el OpenSSL del cliente no tiene permitido usar. El cliente aborta en ssl_choose_client_version. Las pilas TLS antiguas ignoran el rango que ofrece el cliente y simplemente responden con su propia versión; las pilas modernas, en cambio, rechazarían la conexión con una alerta protocol_version.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Confirmar la versión del servidor

    Forzar TLS 1.0 con el nivel de seguridad 0 solo para este comando de diagnóstico muestra si el servidor habla únicamente la versión antigua.

    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.

    Habilitar TLS 1.2 y 1.3 en el servidor

    Actualizar el servidor (o poner delante un terminador TLS moderno) es la única solución duradera.

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

Errores relacionados

Explorar toda la base de datos de errores de firma