Mensagem de erro
javax.net.ssl.SSLHandshakeException: (unrecognized_name) Received fatal alert: unrecognized_name
Também aparece como
- Received fatal alert: unrecognized_name
O JDK 25 informa “(unrecognized_name) Received fatal alert: unrecognized_name”. O Java 7 e as primeiras versões do Java 8 também abortavam quando um servidor enviava esse alerta apenas como aviso, um clássico em configurações do Apache httpd sem um ServerName correspondente.
Java (JSSE) — TLS alert 112 from a server that does not serve the requested SNI name
O que significa
A JVM enviou o nome do host da URL como SNI, e o servidor respondeu com o alerta TLS 112 (unrecognized_name) como alerta fatal, porque não tem nenhum site configurado para esse nome. O Java trata o alerta como fatal e para. O servidor está acessível; ele só não reconhece o nome que você usou.
Por que acontece
O servidor não tem nenhum site para esse nome
comumUm novo nome DNS (ou um CNAME para uma plataforma ou CDN) aponta para um servidor em que o nome nunca foi adicionado.
O cliente usa um alias que o servidor não lista
comumNomes internos ou legados na configuração do cliente que os hosts virtuais do servidor não incluem.
Apache httpd sem um ServerName correspondente
ocasionalO Apache envia unrecognized_name quando nenhum host virtual TLS tem um ServerName ou ServerAlias que corresponda ao nome enviado no SNI.
Como corrigir
- 1.
Descobrir quais nomes o servidor aceita
Teste o handshake com os nomes candidatos usando 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.
Adicionar o nome ao servidor
Configure ServerName ou ServerAlias (ou o equivalente no nginx, na CDN ou na plataforma) junto com um certificado que cubra esse nome.
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.
Usar o nome de host configurado
Prefira corrigir a URL a desativar o SNI globalmente.
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.