Pregunta

Estoy intentando activar la comunicación SSL desde un cliente de servicios web (Axis2) mediante el certificado en la tarjeta de CAC del usuario. Funciona como un encanto .... hasta que el servidor web está habilitada CAC. En ese momento se rechaza la conexión SSL con el mensaje de error de que los otros certificados de la cadena no se incluyeron.

Me he asegurado de que el proveedor está disponible, ya sea mediante la adición al archivo security.properties o crear mediante programación.

Mi enfoque actual es simplemente establecer las propiedades del sistema:     System.setProperty ( "javax.net.ssl.keyStore", "NONE");     System.setProperty ( "javax.net.ssl.keyStoreType", "PKCS11");

pregunta / respuesta que este enfoque sólo envía el certificado "entidad final". Al parecer, lo que necesito para poner en práctica mi propia X509KeyManager. Este es un nuevo camino para mí, ¿alguien puede sugerir una buena referencia o proporcionar muestras de cómo hacerlo?

Apreciar la ayuda.

¿Fue útil?

Solución

La mejor aplicación de gerente depende del emisor de los certificados que se pueden esperar a utilizar.

Si el certificado de CAC del usuario siempre ser emitida por una entidad de certificación específico, simplemente almacenar el certificado de dicho emisor y todos los certificados intermedios más arriba en la cadena en un archivo PKCS # 7. En el método getCertificateChain(), esta colección se puede añadir a ciegas para el certificado del usuario y devuelto.

Si las cosas no son tan simples, pero una lista completa de posibles emisores se pueden enumerar, obtener todos sus certificados, y su los certificados del emisor, y así sucesivamente, hasta los certificados raíz .

Añadir todos los certificados raíz a un almacén de claves como entradas de confianza. Ate los certificados intermedios en un archivo PKcs- # 7-formato.

Implementar X509KeyManager ( o ampliar X509ExtendedKeyManager si' volver a trabajar con SSLEngine). En concreto, en el método getCertificateChain(), va a utilizar un CertPathBuilder para crear una cadena válida del certificado del usuario a una raíz de confianza. La target es el certificado que se carga de CAC del usuario con el parámetro alias. La raíces de confianza son los certificados del almacén de confianza que ha creado; los certificados intermedios pueden ser cargado desde el archivo PKCS # 7 y añadió a los parámetros de constructor. una vez que la cadena se construye, obtener la ruta del certificado y convertirlo para una matriz. Este es el resultado del método getCertificateChain().

Si no se puede predecir quién será la emisión de certificado del usuario, usted podría ser capaz de obtener los certificados intermedios en tiempo de ejecución de un directorio LDAP u otro depósito. Eso es todo un nuevo nivel de dificultad.

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