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

Mensagem de erro

No subject alternative names present

Também aparece como

  • java.security.cert.CertificateException: No subject alternative names present

A partir do JDK 21, o texto da exceção ganha o prefixo “(certificate_unknown) ”. Para nomes de host DNS, um certificado sem SANs ainda pode corresponder pelo Common Name no Java; outros clientes (Go, Chrome) rejeitam esses certificados de imediato.

Java (JSSE HostnameChecker) — certificate without a SAN extension, URL host is an IP address

O que significa

O certificado do servidor não tem nenhuma extensão Subject Alternative Name, e o cliente se conectou por endereço IP. Para endereços IP, o Java exige uma entrada SAN do tipo IP e nunca recorre ao Common Name, então, sem extensão SAN, não há nada para comparar. É o resultado típico de certificados gerados por scripts antigos só com um CN.

Por que acontece

Como corrigir

  1. 1.

    Confirmar que a extensão SAN está ausente

    Imprima o titular e o subjectAltName; se nenhum SAN aparecer na saída, o certificado precisa ser reemitido.

    bash
    openssl x509 -in server.pem -noout -subject -ext subjectAltName
    # "No extensions in certificate" / no SAN output -> the certificate must be reissued
  2. 2.

    Reemitir com subjectAltName

    Adicione entradas DNS e, quando necessário, IP; mantenha o CN apenas para exibição.

    bash
    openssl req -new -key server.key -out server.csr -subj "/CN=api.example.com" \
      -addext "subjectAltName=DNS:api.example.com,IP:10.0.0.5"
    # keytool (Java keystores)
    keytool -genkeypair -alias server -keyalg EC -groupname secp256r1 -dname "CN=api.example.com" \
      -ext "SAN=dns:api.example.com,ip:10.0.0.5" -keystore server.p12 -storepass changeit

Erros relacionados

Ver toda a base de erros de assinatura