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
Le serveur n’a aucun site pour ce nom
fréquenteUn nouveau nom DNS (ou un CNAME vers une plateforme ou un CDN) pointe vers un serveur où ce nom n’a jamais été ajouté.
Le client utilise un alias que le serveur ne déclare pas
fréquenteDes noms internes ou hérités dans la configuration du client, que les hôtes virtuels du serveur n’incluent pas.
Apache httpd sans ServerName correspondant
occasionnelleApache envoie unrecognized_name lorsqu’aucun ServerName ou ServerAlias d’un hôte virtuel TLS ne correspond au nom SNI.
Comment corriger l’erreur
- 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.
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.
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.