Question

Ceci est une coupe du poste Dev Mozilla Crypto ML. En espérant que quelqu'un SO a une certaine expérience en utilisant org.mozilla.jss. MDN

Je suis en train de faire deux requêtes HTTPS séparées à un hôte distant en utilisant deux sockets client et deux certificats clients différents respectivement (client cert A et B). Mon programme de test est une version modifiée de SSLTest .java

De mon hôte, je suis en mesure de faire deux connexions sur deux prises différentes à l'hôte distant. Je suis en mesure de recevoir un 200 arrière OK à partir du serveur Web à distance pour les connexions individuelles.

Mon problème est que le certificat client « A » est utilisé pour les connexions A 'et « B ».

Je me sers ce constructeur :

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

J'ai aussi mis à exécution les SSLClientCertificateSelectionCallback d'interface ( la source ) afin d'utiliser le constructeur ci-dessus et passer le certificat client correct. Aussi, je mis une ligne dans ma fonction implémentée SSLClientCertificateSelectionCallback de select() pour ouvrir une session lorsque le dossier d'appel est exécuté.

L'exécution de mon application, et vérifier le journal, la méthode select () est jamais appelée qu'une fois lors de la création de la première SSLSocket (sélection client Cert « A ») et jamais sur l'avenir instanciations SSLSocket lorsque le surnom Cert B client est spécifié . En fait, je dois redémarrer mon application pour select() à exécuter à nouveau.

Y at-il une manière que je peux déclencher le code de rappel natif pour exécuter select() lorsqu'un certificat est demandé par le serveur distant?

Merci,

PR

Était-ce utile?

La solution

On dirait qu'il pourrait y avoir une mise en cache de la session en cours. Vous avez dit que vous utilisez SSLSocket. Avez-vous essayé de placer la mise en cache de session faux? Par défaut, SSLSocket permet la mise en cache de session.

Par exemple, dans la classe SSLSocket, il y a la méthode public void useCache(boolean b) Si vous définissez passer un paramètre de false après avoir créé la prise, espérons que empêcherez le serveur de mise en cache de votre première session (je suppose que vous appelez les connexions client d'un programme). De cette façon, il devrait vous demander une autre demande de certificat de la deuxième connexion comme vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top