Wie aktiviere ich SNI in HTTP-Anfragen mit Apache HTTPComponents HttpClient?

8

Ich versuche herauszufinden, wie ich eine erfolgreiche HTTP-GET-Anfrage an einen Server senden kann, der SNI benötigt.

Ich habe SO und andere Orte durchsucht und einige Artikel gefunden, die sagten, dass SNI jetzt in JDK7 sowie Apache HTTP Components unterstützt wird.

Ссылка Ссылка

Relevanter SO-Artikel: Zertifikatskette anders zwischen HTTPSURLconnection und Apache (System) DefaultHttpClient

-

Ich kann jedoch keine Dokumente finden, die zeigen, wie das funktioniert.

Hier ist der Code, den ich verwende ...

%Vor%

Wenn ich das ausführe, schlägt die Anfrage fehl.

Der Server benötigt SNI in der Anfrage, und ohne sie gibt es ein abgelaufenes Zertifikat zurück, das den falschen CommonName hat, aufgrund dessen es zurückgewiesen wird.

Wenn ich die Instanz httpclient2 verwende, die mit einem benutzerdefinierten SSL-Kontext eingerichtet wurde, um alle HTTPS-Zertifikate zuzulassen, ist die Anforderung erfolgreich. Dies möchte ich jedoch nicht auf einem Server aktivieren, der täglich viele Downloads gegen verschiedene Hosts durchführt.

Ich verwende httpclient v 4.3.5

Jede Hilfe wird geschätzt.

Danke.

    
feroze 15.09.2014, 18:31
quelle

1 Antwort

8

SNI sollte vollständig transparent arbeiten, wenn es auf Java 1.7 oder neuer läuft. Keine Konfiguration ist erforderlich. Wenn aus irgendeinem Grund ein SSL-Handshake mit einem SNI-fähigen Server fehlschlägt, sollten Sie herausfinden können, warum (und ob die SNI-Erweiterung ordnungsgemäß verwendet wurde), indem Sie die SSL-Debugprotokollierung wie hier beschrieben [1] und hier [2] aktivieren. p>

"Debugging von SSL / TLS-Verbindungen" sieht zwar veraltet aus, kann aber bei der Behandlung von SSL-Problemen immer noch nützlich sein.

[1] Ссылка

[2] Ссылка

    
oleg 16.09.2014, 09:08
quelle

Tags und Links