Frage

Dies ist ein Cross-Post aus dem Mozilla Crypto Dev Ml. In der Hoffnung, dass jemand in so etwas Erfahrung mit dem Mitnehmen hat org.mozilla.jss. Link: JSS - MDN

Ich versuche, zwei separate HTTPS -Anfragen an einen Remote -Host mit zwei Client -Sockets bzw. zwei verschiedenen Client -Zertifikaten (Client Cert A und B) zu stellen. Mein Testprogramm ist eine modifizierte Version von Ssltest.java

Von meinem Host von meinem Host kann ich zwei Verbindungen auf zwei verschiedenen Steckdosen zum Remote -Host herstellen. Ich kann einen 200 OK zurück vom Remote -Webserver für beide Verbindungen erhalten.

Mein Problem ist, dass das Client -Zertifikat 'A' für beide Verbindungen 'A' und 'B' verwendet wird.

Ich habe verwendet Dies Konstrukteur:

public SSLSocket(java.lang.String host,int port, 
java.net.InetAddress localAddr, 
int localPort, 
SSLCertificateApprovalCallback certApprovalCallback, 
SSLClientCertificateSelectionCallback clientCertSelectionCallback)

Ich habe auch die Schnittstelle implementiert SSLClientCertificateSelectionCallback (Quelle) Um den oben genannten Konstruktor zu verwenden und das richtige Client -Zertifikat zu übergeben. Außerdem habe ich eine Linie in meine implementierte Platzierung platziert SSLClientCertificateSelectionCallback select() Funktion zum Protokoll, wenn der Rückruf ausgeführt wird.

Ausführen meiner App und der Überprüfung des Protokolls wird die Select () -Methode immer nur einmal während der Erstellung des ersten SSLSocket (Auswahl des Client -Certes 'A') und nie auf zukünftigen SSLSocket -Instanziationen, wenn der Client -Zertifikat -B -Spitzname angegeben wird, aufgerufen. Tatsächlich muss ich meine App neu starten für select() wieder laufen.

Gibt es eine Möglichkeit, den nativen Callback -Code auszulösen, um auszuführen? select() Wenn ein Zertifikat vom Remote -Server angefordert wird?

Vielen Dank,

Pr

War es hilfreich?

Lösung

Es hört sich so an, als ob es einige Sitzungen gibt. Sie sagten, dass Sie SSLSocket verwenden. Haben Sie versucht, die Sitzung auf false zu setzen? Standardmäßig ermöglicht SSLSocket das Session -Caching.

Zum Beispiel gibt es in der SSLSocket -Klasse die Methode public void useCache(boolean b) Wenn Sie einen Parameter von bestehen false Nachdem Sie den Socket erstellt haben, verhindert hoffentlich, dass der Server Ihre erste Sitzung zwischengespeichert wird (ich gehe davon aus, dass Sie beide Client -Verbindungen von einem Programm aus aufrufen). Auf diese Weise sollte es Sie für eine andere Zertifikatanforderung aus der zweiten Verbindung auffordern, wie Sie möchten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top