2012-02-08 12 views
13

¿Es posible solicitar la generación del par de claves del cliente en el navegador y enviar la clave pública a la CA del servidor para que se firme de forma transparente? Luego, instalando el certificado firmado en el navegador del usuario?Generar certificados del lado del cliente en el navegador y iniciar sesión en el servidor

Escenario:

  1. usuario abre https://examle.com/ página web, la identidad del servidor se verifica
  2. usuario solicita una creación de la cuenta
  3. par de claves es generado en el navegador del usuario y no reveló al servidor/CA
  4. pubkey se envía al servidor para firmar
  5. El servidor firma la clave y genera el certificado
  6. El certificado se envía al cliente y se instala en el navegador junto con la clave privada

La próxima vez que el cliente se conecte al servidor, su identidad se verificará en función del certificado del cliente.

Sería bueno si el servidor pudiera forzar/indicarle al cliente que proteja su clave privada usando la encriptación de contraseñas.

He visto banca en línea usando el applet de Java para esta tarea. ¿Es posible hacerlo usando capacidades de navegador nativo? La solución Apache/PHP o Node.js sería bienvenida.

Respuesta

14

Sí, es posible. Sin embargo, no hay soluciones de navegador cruzado.

  • Para Internet Explorer, tendrá que utilizar algunos controles ActiveX utilizando X509Enrollment.CX509EnrollmentWebClassFactory o CEnroll.CEnroll, dependiendo de si se está ejecutando en Windows XP o Vista/7. Esto generará una solicitud de certificado PKCS n. ° 10 (que es posible que deba envolver entre los delimitadores tradicionales.
  • Para el resto, debe poder usar la etiqueta <keygen />. Es una etiqueta heredada de Netscape, no oficialmente antes de HTML, pero lo ha convertido en HTML 5 (aunque MS dijo que no lo soportaría en sus implementaciones). Esto generará una estructura SPKAC (similar a una CSR).
  • Para Firefox (aunque es compatible con keygen), puede utilizar el CRMF functions.

Here is an example script que debe hacer la mayor parte del trabajo para ActiveX o keygen.

Cuando el servidor envía un certificado a cambio (posiblemente más tarde), el navegador debe importarlo a su tienda y asociarlo con la clave privada que había generado en el momento de la solicitud.

El modo en que se protege la clave privada dependerá del navegador o del mecanismo del almacén de certificados subyacente. En Firefox, debería haber una contraseña maestra en el dispositivo de seguridad, por ejemplo.

En el lado del servidor, puede implementar su propia CA utilizando varias herramientas. OpenSSL y BouncyCastle pueden manejar PKCS # 10 y SPKAC. Aquí hay un BouncyCastle-based example (asociado con el script anterior) y some code for CRMF.

Si desea una solución ya hecha, le puede interesar algo como OpenCA.

+0

¿cómo utilizo la clave privada para descifrar datos (en el caso de HTML5/kegen-tag)? – MhdSyrwan

+2

El elemento '' está en desuso debido a [W3C] (http://w3c.github.io/html/sec-forms.html#elementdef-keygen), [WHATWG] (https: //html.spec.whatwg .org/multipage/forms.html # the-keygen-element) y [MDN] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen) y está desactivado intencionalmente en Chrome a partir de la versión 49. –

Cuestiones relacionadas