Fehlermeldung
javax.net.ssl.SSLHandshakeException: (unrecognized_name) Received fatal alert: unrecognized_name
Auch ausgegeben als
- Received fatal alert: unrecognized_name
JDK 25 meldet „(unrecognized_name) Received fatal alert: unrecognized_name“. Java 7 und frühe Releases von Java 8 brachen auch dann ab, wenn ein Server diesen Alert nur als Warnung sendete – ein Klassiker bei Konfigurationen von Apache httpd ohne passenden ServerName.
Java (JSSE) — TLS alert 112 from a server that does not serve the requested SNI name
Was der Fehler bedeutet
Die JVM hat den Hostnamen aus der URL als SNI gesendet, und der Server hat mit dem TLS-Alert 112 (unrecognized_name) als fatalem Alert geantwortet, weil für diesen Namen keine Website konfiguriert ist. Java behandelt den Alert als fatal und bricht ab. Der Server ist erreichbar; er erkennt nur den Namen nicht, den du verwendet hast.
Warum der Fehler auftritt
Der Server hat keine Website für diesen Namen
häufigEin neuer DNS-Name (oder ein CNAME auf eine Plattform oder ein CDN) zeigt auf einen Server, auf dem der Name nie eingetragen wurde.
Der Client verwendet einen Alias, den der Server nicht aufführt
häufigInterne oder veraltete Namen in der Konfiguration des Clients, die in den virtuellen Hosts des Servers nicht vorkommen.
Apache httpd ohne passenden ServerName
gelegentlichApache sendet unrecognized_name, wenn bei keinem virtuellen TLS-Host ServerName oder ServerAlias zum SNI-Namen passt.
So behebst du den Fehler
- 1.
Namen ermitteln, die der Server akzeptiert
Probiere den Handshake mit infrage kommenden Namen über openssl s_client -servername aus.
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.
Namen auf dem Server hinzufügen
Konfiguriere ServerName oder ServerAlias (oder das Gegenstück in nginx, im CDN oder auf der Plattform) zusammen mit einem Zertifikat, das den Namen abdeckt.
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.
Konfigurierten Hostnamen verwenden
Korrigiere lieber die URL, statt SNI global abzuschalten.
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.