Zulassen, dass Java ein nicht vertrauenswürdiges Zertifikat für die SSL / HTTPS-Verbindung verwendet
Ich habe ein Programm zum extrahieren von Informationen aus einer dynamischen web-Anwendung, und das Programm funktionierte gut, bis ich meine tomcat-server zur Verwendung von SSL mit Hilfe eines selbst-signierten(also nicht vertrauenswürdig) - Zertifikat. Der stack-trace des Fehlers ist:
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
Error: 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:150)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1584)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:174)
at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Handshaker.java:168)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:848)
at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:106)
at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:495)
at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:433)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:877)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1089)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1116)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1100)
at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:402)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:170)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:857)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:230)
at com.certicom.gls.glscs.nongui.URLReader$PostURL.setupURL(URLReader.java:34)
at com.certicom.gls.glscs.nongui.URLReader.getLogin(URLReader.java:227)
at com.certicom.gls.glscs.nongui.URLReader.testLogin(URLReader.java:436)
at com.certicom.gls.glscs.nongui.Controller.loginMenu(Controller.java:384)
at com.certicom.gls.glscs.nongui.Controller.menu(Controller.java:324)
at com.certicom.gls.glscs.nongui.Controller.<init>(Controller.java:49)
at com.certicom.gls.glscs.nongui.Controller.main(Controller.java:61)
In einem web-browser, der Benutzer wird aufgefordert, eine Warnung beim Zugriff auf eine HTTPS-site mit einem nicht vertrauenswürdigen Zertifikat, und gebeten, eine Ausnahme zu machen, wenn er mag gehen; ich möchte zu implementieren, die eine ähnliche Funktionalität für meine command-line-Anwendung... ich gebe zu, ich bin neu auf socket-Programmierung und Vernetzung im Allgemeinen; jeden Rat, dieses problem zu lösen wird groß sein!
Https
- Aufruf InformationsquelleAutor der Frage Midnight Blue | 2009-07-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier einige relevante code:
Dies wird komplett deaktivieren Sie die SSL-Prüfung—nur nicht lernen Ausnahmebehandlung aus solchen code!
Tun, was Sie wollen, hätten Sie einen check implementieren in Ihrem TrustManager, das den Benutzer auffordert.
InformationsquelleAutor der Antwort Yishai
Folgenden code aus hier ist eine sinnvolle Lösung. Keine keystores etc. Rufen Sie einfach die Methode SSLUtilities.trustAllHttpsCertificates (), bevor Sie den service und die Schnittstelle (SOAP).
InformationsquelleAutor der Antwort Krzysztof Szewczyk
Andere option zu bekommen ist ".pem" (public-key) - Datei für diesen bestimmten server, und installieren Sie Sie lokal in das Herz Ihrer JRE "cacerts" - Datei, dann ist es in der Lage zum download von diesem server ohne Beschwerde, ohne die gesamte SSL-Struktur der JVM ausgeführt und ermöglicht den download von anderen unbekannten cert-Servern...
InformationsquelleAutor der Antwort rogerdpack