2012-01-09 48 views
13

Estamos creando una autenticación de tres factores para un sitio web debido a requisitos legales en un país escandinavo. El cliente está utilizando los complementos del navegador con la marca NetID para realizar una autenticación del certificado PKCS # 11 en el navegador. Las tarjetas inteligentes se suministran centralmente por un socio en el cliente.Sitio web PKSC n. ° 11 autenticación de tarjeta inteligente y certificados de cliente SSL

Este tema no tiene muchos recursos en línea o tutoriales disponibles. ¿Alguien tiene alguna sugerencia para ejemplos de implementaciones o tutoriales sobre cómo hacer la autenticación PKCS11 en un navegador web?

EDIT: Encontrado sobre los certificados de cliente SSL

  • Parece que el método de autenticación de certificado de cliente SSL es

  • ¿Cómo manejamos relación entre los usuarios y sus tarjetas inteligentes?

  • ¿Los usuarios nos envían sus claves públicas y nos autenticamos en su contra?

  • ¿Necesitamos firmar/aprovisionar a cada usuario individualmente usando nuestro propio certificado?

  • ¿Todas las tarjetas inteligentes de usuario contienen una clave "genérica" ​​que probamos contra un certificado de proveedor?

http://www.garex.net/apache/

http://www.impetus.us/~rjmooney/projects/misc/clientcertauth.html

https://en.wikipedia.org/wiki/PKCS11

https://service.secmaker.com/examples/plugin.aspx

Respuesta

8

No hacerlo con JavaScript. JavaScript cryptography has a number of problems, y no creo que muchos navegadores le permitan acceder al PKCS # 11 directamente desde JavaScript (ejecutándose desde dentro de la página) fácilmente.

Varios navegadores son compatibles con PKCS # 11 para autenticación HTTPS, es decir, usan PKCS # 11 para autenticación de certificado de cliente como parte de la conexión SSL/TLS (como parte de HTTPS).

Asumiendo que ya tiene una biblioteca PKCS # 11 disponibles (digamos OpenSC en /usr/lib/opensc.so), puede configurar Firefox para usarlo:

  • Preferencias -> Avanzado -> Cifrado, ir en "Dispositivos de Seguridad"
  • Haga clic en 'Load'
  • Elija un nombre de módulo (para su propia referencia de la lista) y el punto en el fichero de /usr/lib/opensc.so (o lo que sea el módulo PKCS # 11 es adecuada en su caso).

Luego, cuando se conecta a un sitio web que solicita un certificado de cliente, el navegador debe ofrecerle elegir un certificado del dispositivo habilitado para PKCS # 11.

El mecanismo de configuración PKCS # 11 variará de un navegador a otro, pero generalmente es una cuestión de establecer la ruta del módulo PKCS # 11.

Hasta donde yo sé, Internet Explorer no utiliza PKCS # 11 (al menos no sin soporte adicional), sino que debe confiar en MS CryptoAPI y en las tarjetas de información en su lugar.

En el lado del servidor, deberá configurar el requisito para la autenticación del certificado del cliente. Nada específico para PKCS # 11 allí.


Después de su edición, usted debe leer acerca de autoridades de certificación (CA) y las infraestructuras de clave pública (PKI). Puede implementar su propia PKI interna, pero parece que sus requisitos son integrarse con una PKI existente. Este es un problema administrativo principalmente, así que consulte con aquellos que hacen este requisito para ver en qué CA desean confiar (probablemente la suya).

Al usar autenticación de certificado de cliente, el cliente presentará su certificado (que contiene la clave pública del usuario y otros atributos, incluido un identificador: el nombre distinguido del sujeto) y el protocolo de enlace SSL/TLS garantizará que el cliente clave privada para este certificado de clave pública. Luego, el servidor verifica este certificado contra las CA en las que confía (eso también es una configuración de SSL en el lado del servidor).

Una vez que haya configurado las CA en las que desea confiar, la asignación generalmente se realiza utilizando el DN del asunto del certificado a un nombre de usuario interno si es necesario. No hay una regla rígida para esto, ya que depende de su esquema de nombres de usuario interno. Dicho esto, a menudo es sensato utilizar el DN completo del sujeto como nombre de usuario.

+0

Gracias. Esto me esclareció un montón de cosas y, en base a esto, pude enviar más preguntas al proveedor de tarjetas inteligentes sobre cómo se manejarán los certificados. –

2

Ahora puede hacerlo. La autenticación web utilizando tarjetas inteligentes o tokens PKCS # 11 puede implementarse utilizando la versión de Silverlight de NCryptoki. Ver http://www.ncryptoki.com

Tiene dos chanches:

1) utilizando la versión de Silverlight de NCryptoki y desarrollar su propio control de usuario Silverlight que implementa el protocolo de autenticación usando PKCS # 11 funciones suministradas por la tarjeta inteligente

2) utilizando el plugin JQuery basado en la versión anterior de Silverlight e implementando el protocolo de autenticación en JavaScript llamando a las funciones PKCS # 11 en JavaScript

+0

Gracias. Silverlight es realmente un caballo moribundo y está atado a una plataforma, por lo que no es una opción aquí. Sin embargo, logré resolver este problema con los certificados del lado del cliente de Apache y SSL. Voy a publicar mi respuesta aquí tan pronto como haya terminado. –

+0

@MikkoOhtamaa puede publicar su solución aquí. – guleryuz

3

Actualmente no puede hacer PKCS # 11 dentro del proceso del navegador. Toda la tecnología nativa adecuada está muriendo (NPAPI) o no está implementada en todos los navegadores. Debe hacerlo fuera del navegador y crear alguna comunicación de interconexión.

Cuestiones relacionadas