Comprendo bene il PKI da un punto di vista concettuale - cioè chiavi private / chiavi pubbliche - la matematica dietro di loro, uso dell'hash & crittografia per firmare un certificato, firma digitale di transazioni o documenti, ecc. Ho anche lavorato su progetti in cui le librerie C di openssl sono state utilizzate con certs per proteggere la comunicazione e l'autenticazione. Sono anche estremamente familiare con gli strumenti della riga di comando di openssl.
Tuttavia, ho pochissima esperienza con i progetti PKI e l'ampli; quindi sto cercando di progettare e codificare un progetto personale per questo.
I requisiti
(Questo è un progetto di apprendimento - Questo non verrà mai usato in una banca)
Questo è il sito web di una banca. Tutti gli utenti di Internet Banking sono autorizzati a utilizzare qualsiasi certificato di firma emesso da alcune CA conosciute (verisign, Thawte, fiducia, ecc.). La Banca non è responsabile per l'acquisto di certificati per l'utente. L'utente accede al sito della banca con il suo ID utente / password, ecc. Ha accesso alla maggior parte del suo account. Tuttavia, quando l'utente desidera effettuare una transazione, ad esempio trasferire denaro su un altro account, la banca vuole che firmi la transazione con un certificato.
Il design
Quando l'utente sceglie l'opzione "Trasferisci" - il sito web visualizza un modulo in cui sono presenti 3 voci: l'account "Trasferisci a", l'importo della transazione e un modo per scegliere un certificato per eseguire la firma digitale & fai la firma.
Concatenare il conto "Trasferisci a" no & l'importo più un nonce e questa è la stringa che verrà firmata e inviata al back-end.
Ho cercato molto ma non sono stato in grado di capire come ottenere - lasciare che l'utente scelga un certificato - fai la firma.
So come l'utente può aggiungere certificati al suo truststore personale su Windows. Ma come chiederei al browser di mostrargli i certificati da cui scegliere?
Come si fa la firma - Non voglio davvero scrivere codice crittografico in Javascript !!! Quindi l'alternativa è un ActiveX o un'applet Java? Esiste un modo migliore? C'è un modo per chiedere al browser di usare il certificato e fare la firma?
Per ora non ho deciso su una piattaforma / framework / linguaggio - quindi questa domanda è piuttosto generica.
Ho cercato molto per questo tipo di informazioni senza fortuna - tutto ciò che ottengo sono tutorial su digital signing, tutorial su come abilitare PKI in Apache, ecc.
Se qualcuno sente che tutto il mio approccio è sbagliato e amp; c'è un modo migliore per fare la firma digitale in una web-app - sentiti libero di suggerire anche queste alternative.