Nuestro sistema se comunica con varios proveedores de servicios web. Todos se invocan desde una única aplicación de cliente Java. Todos los servicios web hasta ahora han estado en SSL, pero ninguno usa certificados de cliente. Bueno, un nuevo compañero está cambiando eso.Elegir certificado de cliente SSL en Java
Hacer que la aplicación use un certificado para la invocación es fácil; configuración javax.net.ssl.keyStore
y javax.net.ssl.keyStorePassword
lo hará. Sin embargo, ahora el problema es cómo hacerlo para que solo use el certificado al invocar ese servicio web en particular. Supongo que, en términos más generales, nos gustaría poder elegir el certificado del cliente que se utilizará, si corresponde.
Una solución rápida podría ser configurar las propiedades del sistema, invocando los métodos, y luego desarmarlos. El único problema con eso es que estamos tratando con una aplicación de subprocesos múltiples, por lo que ahora tendríamos que ocuparnos de la sincronización o bloqueos, o lo que sea.
Se supone que cada cliente de servicio es completamente independiente el uno del otro, y están empaquetados individualmente en JAR separados. Por lo tanto, una opción que se me ha ocurrido (aunque no la hemos analizado adecuadamente) es aislar de alguna manera cada JAR, tal vez cargar cada uno en una máquina virtual diferente con diferentes parámetros. Eso es simplemente una idea que no sé cómo implementar (o si es posible, para el caso)
This post sugiere que es posible seleccionar un certificado individual de un almacén de claves, pero cómo adjuntarlo a la solicitud parece ser un problema diferente por completo.
Estamos utilizando clases Java 1.5, Axis2 y cliente generadas con wsimport
o wsdl2java
.
Lamentablemente no tenemos control sobre los servidores. También esperaba que esos consejos pudieran ser útiles, pero una prueba mostró que al menos con un servidor no lo eran. WRT Axis2, esa también ha sido mi experiencia. Si usted sabe de otra herramienta Java que permite este tipo de comportamiento, le agradecería enormemente que comparta; con gusto lo exploraremos. – Carlos
@Carlos - Tal vez no estaba claro. No necesita ningún control sobre el servidor; si su socio ahora necesita un certificado de cliente, configurará su servidor para solicitarlo. Su cliente * * no enviará ese certificado a ningún otro servidor, ya que (presumiblemente) no lo están solicitando. El único problema potencial sería si los servicios adicionales comienzan a requerir un certificado de cliente, pero no aceptan las mismas CA. – erickson
Entendido, gracias. Supongo que la otra pregunta permanece, sin embargo.Si mañana agregamos otro servicio web que también requiere un certificado de cliente, ¿hay alguna manera de elegir qué certificado en el almacén de claves presentar a cada servicio? – Carlos