Saltar al contenido
ecdsa.com
Java (JSSE HostnameChecker)Java

Mensaje de error

No subject alternative names present

También se muestra como

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

JDK 21 y posteriores anteponen «(certificate_unknown) » al texto de la excepción. Para nombres de host DNS, en Java un certificado sin SAN todavía puede coincidir a través del nombre común; otros clientes (Go, Chrome) rechazan directamente esos certificados.

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

Qué significa

El certificado del servidor no tiene ninguna extensión de nombre alternativo del sujeto, y el cliente se conectó por dirección IP. Para las direcciones IP, Java exige una entrada SAN de tipo IP y nunca recurre al nombre común, así que sin extensión SAN no hay nada con qué comparar. Es el resultado típico de certificados generados por scripts antiguos que solo ponen un CN.

Por qué ocurre

Cómo solucionarlo

  1. 1.

    Confirmar que falta la extensión SAN

    Imprime el sujeto y subjectAltName; si no aparece ningún SAN, hay que volver a emitir el certificado.

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

    Volver a emitir el certificado con subjectAltName

    Añade entradas DNS y, donde haga falta, IP; deja el CN solo para mostrarlo.

    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

Errores relacionados

Explorar toda la base de datos de errores de firma