Im unteren Bereich dieser Frage finden Sie aktuellere Informationen.
Ich versuche, alle SSL-Handshakes abzufangen (so dass ich Informationen über sie erhalten kann und visuelle Informationen für die Benutzer bereitstellen kann, ähnlich wie die grüne Sperre in Browsern), die durch meinen Jersey-Client passieren. Leider scheint Jersey meine SSLSocketFactory-Implementierung nicht zu verwenden, da keine der createSocket-Methoden aufgerufen wird. Es treten keine Fehler auf, es wird nur nichts protokolliert. Der Code sollte klar sein:
Aufruf + Instantiierung:
%Vor%Ссылка
%Vor%DefaultSSLContextProvider:
%Vor%ObservableSSLSocketFactory:
%Vor%Wie ich bereits sagte, treten keine Ausnahmen oder Fehler auf (und die ursprüngliche Anfrage läuft ohne Probleme durch (HTTP 200), aber die einzigen Dinge, die protokolliert werden, sind:
%Vor% Nichts von createSocket()
's oder HandshakeCompletedListener.
Jede Hilfe würde sehr geschätzt werden.
Update 1: Ich habe einige zusätzliche Protokollanweisungen hinzugefügt, und die Situation ist tatsächlich seltsam. Der Jersey-Client ruft tatsächlich die HttpUrlConnectorProvider-Implementierung auf, und in der Tat wird eine Instanz von ObservableSSLSocketFactory für die Verbindung festgelegt. Wenn die Verbindungsmethode für die HttpsURLConnection aufgerufen wird, wird anscheinend die Socket-Factory nicht verwendet.
Update 2: Ich fand einen alten Fehler mit dem Titel: "HttpsURLConnection verwendet nicht die SSLSocketFactory-Datei zum Erstellen aller Sockets" . Dies scheint mein genaues Problem zu sein. Dieser Fehler wurde angeblich in JDK7 behoben. Ich verwende (wie gesagt) 8u60, was ziemlich jenseits der Zeit ist, in der dieser Fehler behoben wurde. Ich bin ziemlich verwirrt. Ich fand das Java-Argument -Djavax.net.debug = all und setze es - Ich habe keine Fehler oder etwas fehl am Platze gesehen, es scheint, dass die HttpsUrlConnection die SSLSocketFactory nicht verwendet.
Update 3: Ich nahm einen Vorschlag von wyvern auf #java @ irc.freenode.net und entschied mich dafür, den Apache-Connector anstelle des JDK HttpsUrlConnection-Connectors zu verwenden, und nach einigem Schmieren und Überreden wurde mir schließlich folgendes präsentiert:
[HandshakeCompletedNotify-Thread][ObservableSSLConnectionSocketFactory] Handshake successful!
Also, ich denke, ich bin dann fertig =).
Stellen Sie vor dem SSL-Handshake sicher, dass der Client und der Dienst die korrekten Zertifikate auf dem Server (Client und Dienst) installiert haben. Siehe URL: Ссылка für die SSLFactory-Implementierung