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
O certificado foi criado sem subjectAltName
comumopenssl req -x509 sem -addext subjectAltName, comandos keytool antigos sem -ext SAN ou certificados gerados por appliances.
O endereço IP foi colocado no Common Name
comumCN=10.0.0.5 parece correto, mas é ignorado na correspondência de IP; só uma entrada SAN do tipo IP conta.
Ferramentas ou modelos de PKI legados
ocasionalModelos de CA interna anteriores à exigência de SAN continuam emitindo certificados só com CN.
Como corrigir
- 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.
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