SSL "Peer nicht authentifiziert" Fehler mit HttpClient 4.1
Baue ich eine einfache app zu überwachen, um Abfragen von einem unserer API-URLs und E-Mail Sie uns, wenn Sie nicht bekommen kann ein HTTP-Statuscode 200 aus der Antwort (dies würde bedeuten, unsere API ist für einige Grund).
Bin ich mit HttpClient 4.1 (dies ist wichtig, weil die API unterscheidet sich stark von 3.x).
Unserer API ist sicher mit SSL, aber die Eingabe von:
in einem web-browser leitet Sie auf
Ohne irgendwelche Fehler.
Wenn HttpClient versucht, Treffer diese URL (http://example.com/our-api
), schlägt es mit einem javax.net.ssl.SSLPeerUnverifiedException
Ausnahme mit einer Nachricht, die besagt:
peer nicht authentifiziert
Ich sehe, dass dies geschieht viel für andere Menschen, was durch diese post (die bietet auch einige Möglichkeiten der Umgehung dieses problem eine Lösung, ich werde zu versuchen und zu implementieren, die heute Abend in der Tat).
Was diese anderen post (und die anderen) das nicht tun ist zu erklären, warum dies passiert in den ersten Platz! Also, anstatt zu Fragen: "wie behebe ich dieses Problem?" Ich dachte, ich würde Fragen "warum ist das passiert?" Bevor ich gehe, barging Voraus mit einer der vorgeschlagenen Lösungen, ich würde gerne wissen, was das problem ist, dass ich bin versucht zu beheben 😉
InformationsquelleAutor der Frage IAmYourFaja | 2012-07-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das server-Zertifikat ist self-signed, dann ist das arbeiten, wie entworfen, und Sie zum importieren des server-Zertifikats in den Schlüsselspeicher.
Vorausgesetzt, das server-Zertifikat von einer bekannten CA, dies geschieht, weil die Menge der CA-Zertifikate zur Verfügung, um einen modernen browser ist viel größer als die begrenzte Menge, die geliefert wird mit JDK/JRE.
Den EasySSL-Lösung gegeben, in einem der Beiträge, die Sie erwähnen, nur begräbt die Fehler, und Sie wissen nicht, wenn der server ein gültiges Zertifikat hat.
Müssen Sie importieren die richtige Root-CA in den keystore um das Zertifikat zu überprüfen. Es gibt einen Grund Sie nicht bekommen kann, um dieses mit der Original-SSL-code, und das ist zu verhindern, dass Sie das schreiben von Programmen, die sich Verhalten, als wenn Sie sicher sind, es aber nicht sind.
InformationsquelleAutor der Antwort Jim Garrison
Dieser wird ausgelöst, wenn
Wahrscheinlich die Ursache für diese Ausnahme (wo ist der stacktrace) zeigen Sie, warum diese Ausnahme wird geworfen. Höchstwahrscheinlich die Standard-keystore ausgeliefert, die mit Java nicht enthalten (und Vertrauen) das root-Zertifikat von der TTP, der verwendet wird.
Die Antwort ist zum abrufen der root-Zertifikat (z.B. von Ihrem Browser SSL-Verbindung), importieren Sie es in die
cacerts
Datei und Vertrauen Sie mitkeytool
die Auslieferung durch die Java JDK. Andernfalls müssen Sie die Zuweisung eines trust store-programmgesteuert.InformationsquelleAutor der Antwort Maarten Bodewes
Ich bin kein java-Entwickler, sondern wurde mit einer java-app zu testen, eine RESTful API. In Ordnung für mich, um den Fehler zu beheben, die ich hatte mit der Installation der Zwischenzertifikate auf dem webserver um, damit der Fehler Weg geht. Ich war mit lighttpd, das original-Zertifikat auf einem IIS-server. Hoffe, es hilft. Dies waren die Zertifikate, die ich hatte, fehlt auf dem server.
InformationsquelleAutor der Antwort pabloh007
InformationsquelleAutor der Antwort vaquar khan