Pular para o conteúdo
ecdsa.com
Java (JSSE)Java

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

Como corrigir

  1. 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. 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. 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.

Erros relacionados

Ver toda a base de erros de assinatura