Web-Intent: firma digitale via browser
La firma digitale basata su smart card o certificati su token USB, come ad esempio la CNS (Carta Nazionale dei Servizi) presenta una sfida architetturale: il browser, per motivi di sicurezza, non può accedere direttamente ai dispositivi crittografici collegati al computer dell'utente. In questo articolo vediamo come risolvere questa problematica con una soluzione che non richieda plug-in e abbia un alto standard di sicurezza.
Firma digitale via web: come implementare una soluzione moderna e sicura
Un software di firma digitale moderno via browser, come già detto, per motivi di sicurezza non può accedere direttamente ai dispositivi crittografici collegati al computer dell'utente. In passato questo problema veniva risolto così:
- ActiveX (funzionanti solo in ambiente Windows)
- Applet Java (era necessario il Java runtime sul PC)
- PlugIn NPAPI
- Estensioni del browser
Tutti questi approcci sono ormai obsoleti o non più supportati dai browser moderni. Una soluzione moderna consiste nell'introdurre un servizio locale di firma, installato sul computer dell'utente, che espone una API su localhost e comunica con la pagina web tramite un meccanismo di Web Intent. Questo pattern architetturale risolve più in generale tutti i problemi legati alla comunicazione da applicazioni web con i device collegati al PC dell'utente.
L'Architettura del software in breve
L'architettura è composta da tre elementi:
- Web App (acceduta via browser)
- Agente di firma locale (applicazione desktop)
- Lettore Smart Card USB Token
Il browser non comunica direttamente con le smart card ma:
- Prepara il documento da firmare
- Invia una richiesta di firma al servizio locale tramite HTTP o web socket
- Riceve il risultato della firma
L'agent locale:
- Rileva i certificati di firma
- Dialoga con il dispositivo crittografico via PKCS#11 CSP Minidriver
- Richiede il PIN di sblocco (se richiesto dalla smart card)
- Appone la firma digitale sul documento
- Restituisce alla Web App il documento firmato
Tutto questo scambio di dati avviene sul canale localhost in assoluta sicurezza.
Che cosa è il paradigma Web Intent?
Il concetto di Web Intent nasce dall'esigenza di permettere ad una pagina web di delegare un'operazione ad un'applicazione installata localmente. Il browser diventa un orchestratore, mentre l'applicazione locale esegue operazioni privilegiate, proprio come la firma digitale via smart card. La comunicazione tra browser e agent di firma avviene usando localhost.
Perchè usare localhost? Innanzitutto perchè localhost non è accedibile dalla rete esterna, pertanto l'applicazione accetta solo richieste provenienti dalla macchina dell'utente (es. browser). Inoltre localhost è supportata da tutti i browser senza estensioni, plug-in e permessi speciali.
Comunicazione sicura tra il browser e il servizio locale
La comunicazione tra browser e agente di firma locale può avvenire nelle seguenti modalità:
- HTTP REST
- WebSocket
- Cusom URI-Scheme
Il primo approccio è quello più utilizzato in quanto semplice e immediato. Il WebSocket è utile in caso di operazioni lunghe o nel caso si voglia inviare delle notifiche sullo stesso canale. Custom URI-Scheme permette di associare ad uno schema una applicazione desktop da aprire sul computer dell'utente (es. firma://sign?id=12345 apre SignAgent.exe).
Sicurezza della Firma Digitale via web
La gestione della sicurezza in una applicazione di firma digitale via browser con agent locale di firma è molto importante. Ci sono diversi controlli che il servizio locale deve implementare come ad esempio:
- Gestione HTTPS su localhost
- Validazione origin
- Token temporanei monouso: la pagina web genera un challenge che il client deve validare con scadenza molto stretta (es. 5 minuti)
- Impedire la firma automatica e permettere all'utente di visualizzare il documento da firmare nell'agent
Conclusioni
l paradigma Web Intent permette di mantenere il modello web moderno delegando però le operazioni che richiedono accesso al sistema operativo ad un componente locale controllato. Per la firma digitale con CNS rappresenta un compromesso efficace:
- Nessun plug-in
- Compatibilità multi piattaforma
- Integrazione semplice anche con sistemi legacy
Questo pattern architetturale del software è applicabile non solo per la firma digitale ma anche in molti altri scenari:
- Lettori smart card
- Dispositivi biometrici
- Token crittografici
- HSM locali (Hardware Security Module)
- Lettore assegni
- Cash Dispenser
- Altri dispositivi collegati al PC
Ti serve una consulenza per implementare una soluzione web-intent per la tua azienda? Non esitare a contattarci.