Message d’erreur
No subject alternative names matching IP address 127.0.0.1 found
Également affiché sous la forme
- java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found
L’adresse est celle de votre URL ; à partir du JDK 21, le texte de l’exception est précédé de « (certificate_unknown) ». Pour les noms d’hôte DNS, le message est « 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
Ce que cela signifie
L’hôte de l’URL est une adresse IP, et l’extension Subject Alternative Name du certificat ne contient aucune entrée d’adresse IP qui lui soit égale. Java (conformément à la RFC 6125) ne compare les adresses IP qu’aux entrées SAN de type IP ; les noms DNS et le nom commun (CN) ne correspondent jamais à une adresse.
Pourquoi cela se produit
Le client se connecte par adresse IP
fréquenteFichiers de configuration, URL JDBC et registres de services qui enregistrent des adresses IP au lieu de noms d’hôte.
Trafic interne au cluster vers des adresses de pods ou de nœuds
fréquenteUne découverte de services qui distribue des adresses IP (pods, nœuds, instances cloud) alors que les certificats portent des noms de service.
Le certificat était prévu pour un accès par IP, mais il lui manque le SAN de type IP
occasionnellePlacer l’adresse IP dans le nom commun (CN) ne fonctionne pas ; elle doit figurer comme entrée IP dans subjectAltName.
Comment corriger l’erreur
- 1.
Se connecter par un nom DNS présent dans le certificat
Utilisez le nom d’hôte et faites-le résoudre vers l’adresse voulue ; la vérification du nom d’hôte réussit alors.
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.
Émettre le certificat avec un SAN de type IP
Lorsque les clients doivent utiliser l’adresse, ajoutez-la comme entrée IP (les AC publiques en émettent rarement ; les AC privées le peuvent).
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