Erhalt aller Zertifikate in einer Kette; die beiden intermediate und root
Ich arbeite in Java mit Apache HTTPClient und versuchen zu verbinden graph.facebook.com. Ich bin immer "SSLPeerUnverifiedException: Nein peer-Zertifikat" Fehler, also denke ich dass Facebook der CA ist nicht in der Standard-keystore. So brauche ich zum erstellen meiner eigenen keystore mit allen Zertifikaten, die ich möchte, zu Vertrauen, ja? So fand ich den folgenden Befehl für den Erwerb des Zertifikats:
echo | openssl s_client -connect graph.facebook.com:443 2>&1 | \
sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > mycert.pem
Weiß nicht, was Los ist, aber es scheint gewirkt zu haben. Ich habe das cert auf einer Hüpfburg formatiert keystore. Ich habe eine SSLSocketFactory mit dem neuen keystore, aber es funktioniert immer noch nicht.
Meine erste Vermutung war, vielleicht habe ich nicht alle Zertifikate in der Kette (scheinbar diese Dinge kommen in chains). Also wie kann ich wissen, ob es so genannte "intermediate" CAs beteiligt? Und wie greife ich die Zertifikate? Bin ich noch auf dem richtigen Weg?
InformationsquelleAutor Neil Traft | 2011-03-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hatte ich endlich Zeit, dies zu prüfen, und es stellt sich heraus, es ist super einfach! Ich war nur fehlt EINE option, um die openssl-Befehl: die showcerts-option. Unten ist ein Beispiel für den Erhalt der Zertifikate geeignet für Verbindung zu Facebook ' s "image-server".
Hinweis: ich fand auch heraus, dass zur Authentifizierung eine SSL-Verbindung, die Sie NICHT wollen, fügen Sie das Zertifikat des Endpunkts, den Sie anschließen in Ihrem keystore. Sie wollen nur das intermediate und root-Zertifikat-Behörden. In einigen Fällen werden nur die root-CA oder sonst erhalten Sie eine Ausnahme. Sehen diese große blog-post für mehr info.
InformationsquelleAutor Neil Traft
Gibt es mehrere Möglichkeiten, um das Zertifikat zu erhalten Kette einer SSL-Verbindung mit HttpClient 4.1
(1) TrustStrategy#isTrusted() kann verwendet werden, um zu untersuchen, Ketten-Zertifikat, das vom remote-server während des ssl-handshake während die sichere Verbindung hergestellt wird.
(2) HttpRoutedConnection#getSSLSession() kann verwendet werden, um eine Referenz auf die details eines etablierten SSL-session, die unter anderem enthalten sollten eine komplette Zertifikats-Ketten des remote-Servers.
InformationsquelleAutor oleg
Den SSL-Zertifikat-Chain-resolver lädt alle Zwischenzertifikate für ein Zertifikat und verkettet diese mit dem angegebenen Zertifikat.
InformationsquelleAutor murze