Pregunta

Este es un poste cruzado del Mozilla Crypto Dev ML. Esperando que alguien tenga algo de experiencia usando org.mozilla.jss. Enlace: JSS - MDN

Estoy tratando de realizar dos solicitudes HTTPS separadas a un host remoto que usa dos enchufes de clientes y dos certificados de cliente diferentes respectivamente (Cert A y B del cliente). Mi programa de prueba es una versión modificada de Ssltest.java

Desde mi host, puedo hacer dos conexiones en dos enchufes diferentes al host remoto. Puedo recibir un 200 OK de regreso del servidor web remoto para ambas conexiones individuales.

Mi problema es que el certificado del cliente 'A' se esté utilizando para las conexiones 'A' y 'B'.

He estado usando este constructor:

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

También he implementado la interfaz SSLClientCertificateSelectionCallback (fuente) para usar el constructor anterior y pasar el certificado de cliente correcto. Además, coloqué una línea en mi implementado SSLClientCertificateSelectionCallback select() función para registrar cuando se ejecuta la devolución de llamada.

Ejecutando mi aplicación y verificando el registro, el método select () solo se llama una vez durante la creación del primer SSLSocket (seleccionando el certificado del cliente 'A') y nunca en futuras instanciaciones de SSLSocket cuando se especifica el nombre del Cert B de Cliente B. De hecho, tengo que reiniciar mi aplicación para select() ser ejecutado de nuevo.

¿Hay alguna forma de activar el código de devolución de llamada nativo? select() ¿Cuando el servidor remoto solicita un certificado?

Gracias,

Representantes

¿Fue útil?

Solución

Parece que podría haber un almacenamiento en caché de la sesión. Dijiste que usas sslsocket. ¿Has intentado configurar el almacenamiento en caché de la sesión en falso? Por defecto, SSLSocket habilita el almacenamiento en caché de la sesión.

Por ejemplo, en la clase SSLSocket, está el método public void useCache(boolean b) Si lo establece, pase un parámetro de false Después de crear el socket, con suerte, eso impide que el servidor almacene en caché su primera sesión (supongo que está llamando a ambas conexiones del cliente desde un programa). De esa manera, debería solicitarle otra solicitud de certificado desde la segunda conexión como lo desea.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top