Estrarre file per firma digitale

Buongiorno, su un sito che stiamo sviluppando dovremmo firmare dei file xml per ottenere dei p7m. Avevo intenzione di usare la libreria bouncycastle per c# ma se ho capito bene necessito di un file “pfx” che contiene certificato e firma privata del firmatario. Avendo a disposizione dispositivi Aruba o Carta nazionale dei servizi c’è modo di estrarre questi dati? O sono “bloccati” all’interno del dispositivo?

Ho alternative? O sto fraintendendo tragicamente il funzionamento della firma?

Non mi espongo riguardo Aruba, ma dalla Carta Nazionale dei Servizi non c’e’ modo di “estrarre” la chiave privata per la procedura di firma. E’ proprio il senso della chiave privata, che resti tale e venga elaborata dal processore interno della carta.
Tra l’altro non esistono, per quanto ne so, procedure legalmente riconosciute per firmare con la CNS come invece esistono per la Carta d’Identita’ Elettronica.
La documentazione tecnica della CNS si trova qui
https://www.agid.gov.it/it/piattaforme/carta-nazionale-servizi
Per la firma occorre un software che acceda alla CNS tramite PIN, che elabori i dati relativi alla firma e che generi il file firmato. L’intera procedura richiede pero’ a sua volta un ente certificatore che confermi che il software ha funzionato correttamente e se ne prenda la responsabilita’, verificata tramite il certificato di questo ente. In sostanza, la “firma” non e’ solo una questione tecnica ma in buona parte organizzativa, basata sui certificati. Nel caso della CIE la garanzia e’ fornita dal Ministero dell’Interno.

Mmm, quindi se ho capito bene, il problema è che all’interno dei vari dispositivi c’è non solo la chiave privata della persona ma anche quella dell’azienda che fornisce il dispositivo e quindi non estraibile. Forse c’è un modo per comunicare con i token tramite un programma esterno? Sto pensando a una procedura che utilizzi il token comunque collegato al pc, ma senza bisogno di aprire programmi di firma. Leggendo nel forum ho visto citate librerie Chilkat a tal proposito

Leggiti questo thread:

In particolare, c’è un mio post con link ad un altro thread che spiega come usare OpenSSL per firmare un file usando una chiavetta collegata al PC.

Sto seguendo, da quel post, la procedura descritta in questo link

Lavoro in windows, ho svolto i tre punti indicati ma non mi è chiaro come proseguire. Credo di dover prendere certe istruzioni dalla parte sopra che descrive le operazioni in ambiente Linux, ma non capisco quali. In particolare il comando storeutl non mi restituisce nulla, credo che dato che il mio chip è “Athena” io debba sostituire qualcosa nel file cnf o nelle istruzioni, ma la procedura non è chiara.

Premesso che non ho mai eseguito la procedura, confrontando le istruzioni Linux e Windows e leggendo la parte sui driver, direi che dovresti:

  • Nel file openssl.cnf, mettere MODULE_PATH = asepkcs oppure MODULE_PATH = bit4p11 (ci sono due moduli associati al chip Athena, non so come si fa a sapere quale usare). Altra cosa che non so è se serve mettere il percorso completo del file (comunque senza estensione .dll) come nella variante Linux.
  • Prima di eseguire i comandi openssl storeutl ..., dovresti eseguire il comando set OPENSSL_CONF=openssl.cnf, come nel file .cmd di esempio.

Altro non mi viene in mente. Al limite prova a scrivere all’email in fondo alla pagina.