Ich versuche, von einer sicheren (d. H. SSL) Webseite im Java-Code zu lesen. Ich versuche, URLConnection (java.net) und Apache HTTPClient zu verwenden. In beiden Fällen, wenn ich den Antrag stellen, bekomme ich diese Ausnahme:Authentifizierung bei SSL-Site in Java nicht möglich: "pathLenConstraint verletzt - dieses Zertifikat muss das letzte Zertifikat im Zertifizierungspfad sein"
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX Pfad Validierung fehlgeschlagen: java.security. cert.CertPathValidatorException: Basiseinschränkungen fehlgeschlagen Prüfung: pathLenConstraint verletzt - dieses cert muss das letzte cert in der Zertifizierungspfad sein bei com.sun.net.ssl.internal.ssl.Alerts.getSSLException (Alerts.java:150) um com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal (SSLSock etImpl.java:1518) unter com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:174) unter com.sun.net.ssl.internal.ssl.Handshaker.fatalSE (Handshaker.java:168) bei com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:848) bei com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage (ClientHandshaker.java:106) bei com.sun.net.ssl.internal.ssl.Handshaker.processLoop (Handshaker.java:495) bei com.sun.net.ssl.internal.ssl.Handshaker.process_record (Handshaker.java:433) unter com.sun.net.ssl.internal.ssl.SSLSocketIm pl.readRecord (SSLSocketImpl.java:818) bei com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake (SSLSocketImpl.java:1030) bei com.sun.net.ssl.internal.ssl. SSLSocketImpl.startHandshake (SSLSocketImpl.java:1057) bei com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake (SSLSocketImpl.java:1041) bei sun.net.www.protocol.https.HttpsClient. afterConnect (HttpsClient.java:402) bei sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect (AbstractDelegateHttpsURLConnection.java:166) bei sun.net.www.protocol.http.HttpURLConnection.getInputStream (HttpURLConnection. Java: 934) bei sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream (HttpsURLConnectionImpl.java:234) bei com.sap.river.coghead.rest.Main.testJavaHTTPConnection (Main.java:45) bei com .sap.river.coghead.rest.Main.main (Main.java:32) verursacht durch: sun.security.validator.ValidatorException: PKIX Pfadüberprüfung fehlgeschlagen: java.security.cert.CertPathValidatorException: Basiseinschränkungen Überprüfung fehlgeschlagen: pathLenConstraint verletzt - dieses Zertifikat muss das letzte Zertifikat in der Zertifizierung Pfad sein bei sun.security.validator.PKIXValidator.doValidate (PKIXValida tor.java:187) bei sun.security.validator.PKIXValidator.engineValidate (PKIXValidator.java:139) bei sun.security.validator.Validator.validate (Validator.java:203) bei com.sun .net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted (X509TrustManagerImpl.java:172) unter com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted (SSLContextImpl.Java: 320) bei com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (ClientHandshaker.java:841) ... 13 weitere Verursacht durch: java.security.cert.CertPathValidatorException: Basiseinschränkungen Prüfung fehlgeschlagen: pathLenConstraint verletzt - dieses cert muss das letzte cert in der Zertifizierungspfad bei sun.security.provider.certpath.PKIXMasterCertPathValidator.validate (PKIXMasterCertPathValidator.java:139) bei sun.security.provider.certpath sein .PKIXCertPathValidator.doValidate (PKIXCertPathValidator.java:316) unter sun.security.provider.certpath.PKIXCertPathValidator.engineValidate (PKIXCert PathValidator.java:178) bei java.security.cert.CertPathValidator.validate (CertPathValidator.java:206) bei sun.security.validator.PKIXValidator.doValidate (PKIXValidator.java:182) ... 18 mehr
Beachten Sie, dass es mir gelungen ist, eine Nicht-SSL-Verbindung zu einem anderen Host herzustellen. Ich kann diese Seite auch mit dem Browser anzeigen - die Zertifikate werden dort korrekt validiert.
Muss ich irgendwie die Reihenfolge der Zertifikate ändern, wenn sie vom Server abgerufen werden? Gibt es eine Konfiguration, die ich vermisse?
Vielen Dank im Voraus,
Lior
Ich weiß nicht, ob das hilft, aber Java können Sie die Standard SLLSocketFactory ändern. – Powerlord
Ja, ich stelle mir vor, ich muss etwas in diesem Bereich tun. Ich muss es nur weiter untersuchen. Danke trotzdem, - Lior – Lior
FYI, das Passwort für die Standard-Java-Zertifikate keystore $ JAVA_HOME/lib/security/cacerts ist 'changeit' –