Mensagem de erro
No subject alternative names matching IP address 127.0.0.1 found
Também aparece como
- java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found
O endereço é o da sua URL; a partir do JDK 21, o texto da exceção ganha o prefixo “(certificate_unknown) ”. Para nomes de host DNS, a mensagem é “No subject alternative DNS name matching <host> found.”
Java (JSSE HostnameChecker) — URL host is an IP address that is not an IP SAN of the certificate
O que significa
O host da URL é um endereço IP, e a extensão Subject Alternative Name do certificado não tem nenhuma entrada de endereço IP igual a ele. O Java (segundo a RFC 6125) compara endereços IP apenas com entradas SAN do tipo IP; nomes DNS e o Common Name nunca correspondem a um endereço.
Por que acontece
O cliente se conecta por endereço IP
comumArquivos de configuração, URLs JDBC e registros de serviços que guardam endereços IP em vez de nomes de host.
Tráfego interno do cluster para endereços de pods ou de nós
comumDescoberta de serviços que entrega endereços IP (pods, nós, instâncias de nuvem) enquanto os certificados trazem nomes de serviço.
O certificado foi feito para acesso por IP, mas não tem o SAN de IP
ocasionalColocar o endereço IP no Common Name não funciona; ele precisa ser uma entrada IP em subjectAltName.
Como corrigir
- 1.
Conectar por um nome DNS que conste do certificado
Use o nome de host e faça-o resolver para o endereço necessário; assim a verificação do nome de host passa.
bash # Use the DNS name from the certificate; map it to the IP where needed echo "10.0.0.5 api.example.com" | sudo tee -a /etc/hosts curl -sI https://api.example.com/ - 2.
Emitir o certificado com um SAN de IP
Quando os clientes precisam usar o endereço, adicione-o como entrada IP (CAs públicas raramente emitem esse tipo de certificado; CAs privadas podem emitir).
bash # Or issue the certificate with the IP address as an IP SAN entry 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 -certreq -alias server -keystore server.p12 -ext "SAN=dns:api.example.com,ip:10.0.0.5" -file server.csr