Aller au contenu
ecdsa.com
Java (JSSE)Java

Message d’erreur

javax.net.ssl.SSLHandshakeException: (unrecognized_name) Received fatal alert: unrecognized_name

Également affiché sous la forme

  • Received fatal alert: unrecognized_name

Le JDK 25 affiche « (unrecognized_name) Received fatal alert: unrecognized_name ». Java 7 et les premières versions de Java 8 s’arrêtaient aussi lorsqu’un serveur envoyait cette alerte comme simple avertissement, un cas classique avec les configurations Apache httpd dépourvues de ServerName correspondant.

Java (JSSE) — TLS alert 112 from a server that does not serve the requested SNI name

Ce que cela signifie

La JVM a envoyé le nom d’hôte de l’URL comme SNI, et le serveur a répondu par l’alerte TLS 112 (unrecognized_name), sous forme d’alerte fatale, car il n’a aucun site configuré pour ce nom. Java traite l’alerte comme fatale et s’arrête. Le serveur est joignable ; il ne reconnaît simplement pas le nom que vous avez utilisé.

Pourquoi cela se produit

Comment corriger l’erreur

  1. 1.

    Trouver les noms acceptés par le serveur

    Testez le handshake avec les noms candidats à l’aide d’openssl s_client -servername.

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

    Ajouter le nom sur le serveur

    Configurez ServerName ou ServerAlias (ou l’équivalent dans nginx, le CDN ou la plateforme) avec un certificat qui couvre ce nom.

    text
    # Apache httpd: every name clients use must be a ServerName or ServerAlias of a TLS vhost
    <VirtualHost *:443>
        ServerName  api.example.com
        ServerAlias api-legacy.example.com
        SSLEngine on
    </VirtualHost>
  3. 3.

    Utiliser le nom d’hôte configuré

    Corrigez de préférence l’URL plutôt que de désactiver le SNI globalement.

    text
    Use the server's configured host name in the URL. Turning SNI off with
    -Djsse.enableSNIExtension=false only works if the server's default site is the one you need,
    and it breaks every server that relies on SNI; avoid it.

Erreurs associées

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