2012-02-08 5 views
13

È possibile richiedere la generazione di coppie di chiavi dei client nel browser e inviare la chiave pubblica alla CA del server da firmare in modo trasparente? Quindi installare il certificato firmato nel browser dell'utente?Generazione di certificati lato client nel browser e accesso al server

Scenario: richiede

  1. utente apre https://examle.com/ pagina web, l'identità del server è verificata
  2. utente una creazione di account
  3. coppia di chiavi è generata in del browser dell'utente e non ha rivelato al server/CA
  4. Pubkey viene inviato al server per la firma
  5. Server firma la chiave e genera il certificato
  6. Il certificato viene inviato al client e installato nel browser insieme alla chiave privata

La prossima volta che il client si collega al server, la sua identità viene verificata in base al certificato client.

Sarebbe bello se il server potesse forzare/suggerire al client di proteggere la sua chiave privata utilizzando la crittografia della password.

Ho visto servizi bancari online utilizzando l'applet Java per questa attività. È possibile farlo usando capabiliti del browser nativo? La soluzione Apache/PHP o Node.js sarebbe la benvenuta.

risposta

14

Sì, è possibile. Non ci sono soluzioni cross-browser, però.

  • Per Internet Explorer, si dovrà utilizzare alcuni controlli ActiveX utilizzando X509Enrollment.CX509EnrollmentWebClassFactory o CEnroll.CEnroll, a seconda se è in esecuzione su Windows XP o Vista/7. Questo genererà una richiesta di certificato PKCS # 10 (che potrebbe essere necessario avvolgere tra i delimitatori tradizionali
  • Per il resto, dovresti essere in grado di usare il tag <keygen />. È un tag Netscape legacy, non ufficialmente HTML prima, ma è diventato HTML 5 (anche se MS ha dichiarato che non lo supporterebbe nelle loro implementazioni) Questo genererà una struttura SPKAC (simile a una CSR)
  • Per Firefox (sebbene supporti keygen), è possibile utilizzare il CRMF functions.

Here is an example script che dovrebbe fare la maggior parte del lavoro per ActiveX o Keygen.

01.235.

Quando il server invia un certificato in risposta (eventualmente in seguito), il browser deve importarlo nel suo archivio e associarlo con la chiave privata che aveva generato al momento della richiesta.

La modalità di protezione della chiave privata dipende dal browser o dal meccanismo di memorizzazione dei certificati sottostante. Ad esempio, in Firefox dovrebbe esserci una password principale sul dispositivo di sicurezza.

Sul lato server, è possibile implementare la propria CA utilizzando vari strumenti. OpenSSL e BouncyCastle possono gestire PKCS # 10 e SPKAC. Ecco uno BouncyCastle-based example (associato allo script sopra) e some code for CRMF.

Se si desidera una soluzione pronta, potrebbe essere interessato a qualcosa come OpenCA.

+0

Come utilizzare la chiave privata per decrittografare i dati (nel caso di HTML5/tag kegen)? – MhdSyrwan

+2

L'elemento '' è deprecato in base a [W3C] (http://w3c.github.io/html/sec-forms.html#elementdef-keygen), [WHATWG] (https: //html.spec.whatwg .org/multipage/forms.html # the-keygen-element) e [MDN] (https://developer.mozilla.org/en-US/docs/Web/HTML/Element/keygen) ed è intenzionalmente disabilitato in Chrome dalla versione 49. –

Problemi correlati