Aller au contenu
ecdsa.com
OpenSSL (client side)CLI OpenSSL

Message d’erreur

SSL routines:ssl3_read_bytes:tlsv1 unrecognized name

Également affiché sous la forme

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

OpenSSL 3.x affiche « error:0A000458:SSL routines:ssl3_read_bytes:tlsv1 unrecognized name:…:SSL alert number 112 ». Les clients Java signalent la même alerte sous la forme « 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

Ce que cela signifie

Le client a envoyé un nom de serveur (SNI) que le serveur ne sert pas, et le serveur a répondu par l’alerte TLS 112 (unrecognized_name) en tant qu’alerte fatale. La RFC 6066 permet aux serveurs d’envoyer cette alerte comme avertissement ou comme alerte fatale ; les serveurs stricts (et certains équipements) traitent les noms inconnus comme fatals, si bien que le handshake se termine avant qu’aucun certificat ne soit présenté.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Trouver les noms acceptés par le serveur

    Tentez le handshake avec chaque nom candidat ; ceux qui réussissent sont configurés sur le serveur.

    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.

    Configurer le nom manquant sur le serveur

    Ajoutez le nom au bloc server (ou à la liste de domaines du CDN ou de la plateforme), avec un certificat qui le couvre.

    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.

    Faire envoyer le bon nom par le client

    Conservez le vrai nom d’hôte dans l’URL et ne remplacez que l’adresse (curl --resolve, options servername des bibliothèques).

    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

Erreurs associées

Parcourir toute la base de données des erreurs de signature