Wie man den PKIX-Pfadaufbau ignoriert, ist fehlgeschlagen: sun.security.provider.certpath.SunCertPathBuilderException?
Habe ich die folgende Ausnahme ausgelöst, wenn Sie versuchen, nach einer Anfrage an einen http-server:
Hier ist der code, den ich verwendet
URL url = new URL(
"https://www.abc.com");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("GET");
conn.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
//wr.writeBytes(params);
wr.flush();
wr.close();
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
String line = null;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
Hier ist die Ausnahme:
Exception in thread "main" javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:174)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1731)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:241)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:235)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1206)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:136)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:593)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:529)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:925)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1170)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1197)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1181)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:434)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:166)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1014)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at com.amazon.mzang.tools.httpchecker.CategoryYank.getPV(CategoryYank.java:32)
at com.amazon.mzang.tools.httpchecker.CategoryYank.main(CategoryYank.java:18)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:323)
at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:217)
at sun.security.validator.Validator.validate(Validator.java:218)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:126)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:209)
at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1185)
... 13 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:174)
at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:238)
at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:318)
... 19 more
Ist der server nicht im Besitz von mir. Gibt es eine Möglichkeit, dies zu ignorieren Ausnahme?
InformationsquelleAutor der Frage DeepNightTwo | 2012-11-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie möchten, ignorieren Sie das Zertifikat alle zusammen, dann werfen Sie einen Blick auf die Antwort hier: Ignorieren, selbst-signierte ssl-cert mit der Jersey-Client
Obwohl dieses werden Sie machen Sie Ihre app anfällig für man-in-the-middle-Angriffe.
Oder, versuchen Sie, den cert, um Ihre java-Shop als trusted cert.
Diese Website kann hilfreich sein.
http://blog.icodejava.com/tag/get-public-key-of-ssl-certificate-in-java/
Hier ist noch ein thread der zeigt, wie man hinzufügen eines cert zu Ihrem Geschäft.
Java-SSL-verbinden, fügen Sie server-cert zur keystore-programmgesteuert
Der Schlüssel ist:
InformationsquelleAutor der Antwort km1
Ich habe den folgenden code zum überschreiben der SSL-überprüfung, die in meinem Projekt, und es funktionierte für mich.
InformationsquelleAutor der Antwort Kishore Kumar
Set
validateTLSCertificates
Eigenschaftfalse
für Ihre JSoup Befehl.InformationsquelleAutor der Antwort Zahid Hasan
FWIW, auf Ubuntu 10.04.2 LTS installieren von ca-certificates-java-und ca-Zertifikate Pakete behoben das problem für mich.
InformationsquelleAutor der Antwort slim
Ich habe den gleichen Fehler beim ausführen der unten spring-boot + RestAssured einfachen test.
Die einfache Lösung in meinem Fall ist Sie 'useRelaxedHTTPSValidations()'
Dann ist der test sieht aus wie
InformationsquelleAutor der Antwort Praveen