Menu

AppletIterateSignatureOverMultipleDocuments

resolir

Firmare più files iterativamente usando una stessa sessione dell'Applet.

Spesso all'interno di un'applicazione si presenta la necessità di iterare la sessione di firma su più documenti. PKCS11SignApplet supporta questa funzionalità, nel seguito verrà illustrato brevemente come attivarla.

Inizializzazione dell'applet: parametro singleSignature

Si abilita nell'applet il supporto per la firma iterativa impostando a "false" il parametro singleSignature:

<param name="singleSignature" value="false">

In conseguenza di ciò, l'applet riporterà nella barra inferiore il numero d'ordine del documento corrente e richiederà il PIN solo al primo documento, mentre per i successivi il campo PIN sarà sostituito da un pulsante "Firma". L'applet al termine del processo di firma invia l'encrypted digest del documento corrente al server, tramite POST. Nella modalità di firma iterativa si aspetta di ricevere come risposta l'hash del documento successivo, predisponendosi così per la nuova firma.

Quindi basta che il server, ricevuto l'encrypted digest del documento corrente e generata la busta crittografica, recuperi l'InputStream del documento successivo e ripeta ciò che è stato fatto in precedenza:

1. Istanziazione di un nuovo CMSBuilder
cmsb = new CMSBuilder(CMSSignedDataGenerator.DIGEST_SHA256,
CMSSignedDataGenerator.ENCRYPTION_RSA);
cmsb.initializeDataHash(docStream);
2. Recupero del content hash
encodedContentHash = cmsb.getEncodedDataHash();
3. Inserimento del CMSBuilder in sessione usando il content hash come chiave (se si usa questo metodo per recuperare successivamente CMSBuilder)
//Si inserisce il nuovo CMSBuilder in sessione, con nuovo datahash come id 
request.getSession().setAttribute(encodedContentHash,cmsb);
4. Restituzione all'applet del content hash, codificato base64
//restituisco il nuovo datahash all'applet
out.print(encodedContentHash);

L'applet imposterà e visualizzerà il nuovo hash, utilizzandolo per visualizzare tramite la funzione javascript viewdocument() il nuovo documento.

N.B.: Dato che il PIN viene mantenuto in cache, tutti i documenti successivi al primo vanno firmati dalla stessa persona, che deve essere informata sulla necessità di completare l'iterazione in modo che il pin venga cancellato dalla memoria dell'applet.


MongoDB Logo MongoDB