2009-04-15 12 views
8

Necesito escribir un programa java para conectarme a un servidor HTTPS (sitio web del DoD). El sitio web requiere autenticación CAC (tarjeta de acceso común DoD). Si accede a este sitio a través del navegador, inserte su CAC primero y luego ingrese un PIN.Cómo conectarse al servidor HTTPS usando la tarjeta de acceso común

Necesito realizar el proceso de autenticación programáticamente en java (algo así como actuar como navegador). ¿Cómo recupero la información del CAC? He estado buscando en Google y he leído la Guía de referencia de Java PKCS # 11. Parece que el proveedor de Sun PKCS # 11 puede hacerlo, pero necesita la implementación nativa del token PKCS # 11.

¿Estoy en lo cierto? ¿Alguien ha hecho esto antes? Cualquier sugerencia o comentario será muy apreciado.

+0

eche un vistazo a http://stackoverflow.com/questions/544056/common-access-card-cac-authentication-using-java podría darle algunos consejos. –

Respuesta

3

Primero, necesita instalar el soporte PKCS # 11. Este es un código nativo que probablemente vino con su lector de tarjetas que proporciona un .dll (o .so) que proporciona una interfaz PKCS # 11. Otro software en el sistema, como los productos Mozilla y el proveedor Sun's PKCS # 11, usa esta biblioteca. (Los productos de Microsoft a menudo usan una interfaz diferente, "CAPI").

Luego, siguiendo las instrucciones en el PKCS #11 Reference Guide, configure un proveedor SunPKCS11. Las únicas propiedades que tuve que proporcionar en mi configuración son la ubicación de la "biblioteca" nativa que se instaló y el sufijo de "nombre" para este proveedor. La propiedad "nombre" se agrega a "SunPKCS11-", por lo que si especifica "CAC" para el nombre, puede buscar el Provider más adelante con Security.getProvider("SunPKCS11-CAC").

A continuación, puede utilizar las propiedades del sistema JSSE estándar javax.net.ssl.keyStore (con un valor de "NONE") y javax.net.ssl.keyStoreType (con un valor de "PKCS11") para dar el acceso al material JSSE tecla en el CAC. No es necesario configurar la propiedad de la contraseña, ya que el código nativo debe solicitar al usuario su PIN cuando sea necesario.

La advertencia es que solo el certificado de "entidad final" del usuario está disponible desde el CAC. Para construir una cadena confiable, la mayoría de los servidores esperan que el cliente envíe certificados intermedios. Solucionar esto es posible, pero complicado, ya que implica implementar su propio javax.net.ssl.X509KeyManager. Si el servidor con el que está trabajando requiere una cadena completa, publique una pregunta de seguimiento.

Cuestiones relacionadas