Fehlermeldung
No subject alternative names matching IP address 127.0.0.1 found
Auch ausgegeben als
- java.security.cert.CertificateException: No subject alternative names matching IP address 127.0.0.1 found
Die Adresse ist die aus deiner URL; JDK 21 und neuer stellen dem Text der Exception „(certificate_unknown) “ voran. Für DNS-Hostnamen lautet die Meldung „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
Was der Fehler bedeutet
Der Host der URL ist eine IP-Adresse, und das Zertifikat hat in seiner Erweiterung Subject Alternative Name keinen IP-Adress-Eintrag, der ihr entspricht. Java vergleicht IP-Adressen (gemäß RFC 6125) nur mit IP-SAN-Einträgen; DNS-Namen und der Common Name passen nie zu einer Adresse.
Warum der Fehler auftritt
Der Client verbindet sich über eine IP-Adresse
häufigKonfigurationsdateien, JDBC-URLs und Service-Registrys, die IP-Adressen statt Hostnamen speichern.
Clusterinterner Traffic zu Pod- oder Node-Adressen
häufigService Discovery, die IP-Adressen ausgibt (Pods, Nodes, Cloud-Instanzen), während die Zertifikate Dienstnamen enthalten.
Das Zertifikat war für den Zugriff per IP gedacht, aber ihm fehlt der IP-SAN
gelegentlichDie IP-Adresse in den Common Name zu schreiben funktioniert nicht; sie muss als IP-Eintrag in subjectAltName stehen.
So behebst du den Fehler
- 1.
Über einen DNS-Namen verbinden, den das Zertifikat enthält
Verwende den Hostnamen und löse ihn zur benötigten Adresse auf; dann besteht die Hostnamenprüfung.
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.
Zertifikat mit IP-SAN ausstellen
Müssen Clients die Adresse verwenden, füge sie als IP-Eintrag hinzu (öffentliche CAs stellen solche Zertifikate selten aus, private CAs können das).
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