Implementazione di dati con firma digitale in un'applicazione Web

6

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.

    
posta user93353 07.06.2013 - 13:50
fonte

1 risposta

1

Potrei sbagliarmi su questo, ma per quanto ne so senza ricorrere all'implementazione di crypto in JavaScript o usando un qualche tipo di plugin non puoi fare esattamente quello che stai tentando.

C'è qualcosa di simile che è impopolare, ma abbastanza ben supportato: Certificati lato client

L'idea generale è che il client abbia un certificato nel portachiavi e che il certificato sia esaminato quando richiedono una risorsa protetta come parte della sequenza di autorizzazione. Dopo questo punto la comunicazione procede sul normale SSL di tutti i giorni.

Nel tuo caso se dovessi avere un servizio web che era dietro SSL e un modulo che registra il trasferimento, transferTo e nonce e il servizio è stato configurato in modo appropriato per richiedere i certificati client il servizio risponderebbe alla richiesta iniziale con una richiesta per le credenziali e i nomi distinti degli emittenti che accetterà. Se il browser ha più di un certificato client da tale elenco dovrebbe richiedere all'utente di selezionare.

Il resto della conversazione è gestito come qualsiasi altro SSL come ho capito, ma dovresti quindi avere accesso al certificato client come parte dell'oggetto richiesta dalla fine del server.

Questo non è esattamente quello che stavi chiedendo, ma per quanto ne so è il più vicino che puoi ottenere senza fare qualcosa di non standard. La comunicazione è sicura a causa del protocollo SSL, l'utente ha dimostrato di disporre di una copia del certificato e sul lato server è possibile utilizzare il certificato per verificare che l'utente corrisponda a chi dichiara di essere un fattore di autenticazione aggiuntivo. Il messaggio non è letteralmente firmato con la chiave, ma il canale di comunicazione SSL il messaggio viaggiato è stato verificato con la chiave del client.

Un overflow dello stack che discute ulteriormente (vedi i link di prima risposta e):

link

Esempi di come potresti configurarlo se ti trovi in Microsoft land:

link

link (versioni precedenti)

    
risposta data 11.06.2013 - 18:27
fonte

Leggi altre domande sui tag