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

Mensaje de error

SSL routines:ssl3_read_bytes:tlsv1 unrecognized name

También se muestra como

  • error:0A000458:SSL routines::tlsv1 unrecognized name
  • SSL alert number 112

OpenSSL 3.x imprime «error:0A000458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name:…:SSL alert number 112». Los clientes Java notifican la misma alerta como «javax.net.ssl.SSLHandshakeException: Received fatal alert: unrecognized_name».

OpenSSL (client side) — TLS alert 112 (unrecognized_name) sent by a server that does not serve the requested SNI name

Qué significa

El cliente envió un nombre de servidor (SNI) que el servidor no sirve, y el servidor respondió con la alerta TLS 112 (unrecognized_name) como alerta fatal. El RFC 6066 permite a los servidores enviar esta alerta como advertencia o como fatal; los servidores estrictos (y algunos dispositivos dedicados) tratan los nombres desconocidos como fatales, así que el handshake termina antes de que se muestre ningún certificado.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Averiguar qué nombres acepta el servidor

    Prueba el handshake con cada nombre candidato; aquellos con los que se completa están configurados en el servidor.

    bash
    # Which names does the server accept?
    for n in example.com www.example.com api.example.com; do
      printf '%-20s ' "$n"
      echo | openssl s_client -connect 203.0.113.10:443 -servername "$n" -brief 2>&1 | grep -m1 -E 'Protocol version|error' || echo fail
    done
  2. 2.

    Configurar en el servidor el nombre que falta

    Añade el nombre al bloque server (o a la lista de dominios de la CDN o la plataforma) junto con un certificado que lo cubra.

    text
    # nginx: a server block (and certificate) for every name clients use
    server {
        listen 443 ssl;
        server_name api.example.com legacy-api.example.com;
        ssl_certificate     /etc/nginx/tls/api.fullchain.pem;
        ssl_certificate_key /etc/nginx/tls/api.key;
    }
  3. 3.

    Hacer que el cliente envíe el nombre correcto

    Mantén el nombre de host real en la URL y sustituye solo la dirección (curl --resolve, las opciones servername de las bibliotecas).

    bash
    # Send the server's real name as SNI when connecting by address
    curl --resolve api.example.com:443:203.0.113.10 https://api.example.com/
    openssl s_client -connect 203.0.113.10:443 -servername api.example.com </dev/null

Errores relacionados

Explorar toda la base de datos de errores de firma