Istruzioni per firmare digitalmente con la CIE (CAdES compatibile) (1)

in ambiente Linux (per esperti o sviluppatori)
  1. Scarichiamo da qui: github.com/opensignature/cie-pkcs11/archive/refs/heads/main.zip i sorgenti e compiliamoli con: 'make'
    A fine compilazione sarà presente il file 'libcie-pkcs11.so'

  2. Scarichiamo da qui: github.com/opensignature/openssl/archive/signonly-pkcs11-engine.zip i sorgenti e compiliamoli con:

    ./config --openssldir=/usr/local/ssl
    make && make install

    Se la compilazione non ha dato errore eseguite openssl version che vi darà OpenSSL 3.0.0-dev xx XXX xxxx

  3. Creiamo un file di configurazione per openssl, ad esempio openssl.cnf in cui scriviamo
    openssl_conf = openssl_init
    [openssl_init]
    engines = engine_section
    [engine_section]
    pkcs11 = pkcs11_section
    [pkcs11_section]
    engine_id = pkcs11
    dynamic_path = /usr/local/ssl/engines/pkcs11.so
    MODULE_PATH = /usr/local/lib/libcie-pkcs11.so
    (ovviamente i percorsi dei file possono cambiare)

  4. Con openssl storeutl -engine pkcs11 'pkcs11:' avremo l'elenco delle coppie [chiave privata / chiave pubblica] presenti nella CIE. Scarichiamo il certificato corrispondente alla chiave privata con cui firmeremo: openssl storeutl -out certificato.pem -engine pkcs11 'pkcs11:type=cert;id=CIE0' (CIE0 è l'ID della chiave)

  5. creiamo un file con comandi bash, ad esempio firma.sh in cui mettiamo:
    OPENSSL_CONF=./openssl.cnf
    export OPENSSL_CONF
    openssl cms -nosmimecap -md sha256 -nodetach -binary -cades -stream -outform DER -sign -signer certificato.pem -inkey CIE0 -keyform engine -in $1 -out $1.p7m -engine pkcs11
    (N.B. se si tratta di aggiungere una firma ad un documento precedentemente firmato, quindi nel caso di controfirma o firme multiple occorre sostituire la terza riga dello script con:
    openssl cms -nosmimecap -md sha256 -nodetach -binary -cades -stream -outform DER -resign -signer certificato.pem -inkey CIE0 -keyform engine -inform der -in $1 -out $1.p7m -engine pkcs11 )

  6. siamo pronti per firmare: firma.sh miotesto.txt

  7. se vogliamo qualcosa di "grafico" possiamo usare il tool zenity e lo script sarà:
    export OPENSSL_CONF=./openssl.cnf
    if pin=$(zenity --forms --text "Inserisci il pin della CIE" --width=300 \
    --title="Firma elettronica avanzata by Blia.it" --add-password=PIN)
    then
    if file=$(zenity --file-selection)
    then
    openssl cms -nosmimecap -md sha256 -nodetach -binary -cades \
    -stream -outform DER -sign -signer certificato.pem -inkey \
    "pkcs11:id=CIE0;type=private;pin-value=$pin" \
    -keyform engine -in $file -out $file.p7m -engine pkcs11
    zenity --info --width=600 --text="File firmato $file.p7m"
    fi
    fi

Una versione sperimentale per Windows è disponibile qui: sites.google.com/site/antiac/cie.zip

(1) Dal punto di vista legale è una "firma elettronica avanzata"

Per dubbi, commenti e proposte potete usare l'email in fondo alla pagina. Altre istruzioni scritte da noi li potete trovare sul sito Saela.eu all'indirizzo: saela.eu/openssl.

lo staff di Blia.it


Blia.it NON utilizza cookie (v. informativa)

Per contattare la redazione di Blia.it potete scrivere a: info@blia.it
(attenzione, blia.it non ha nessun rapporto con banche, scuole o altri enti/aziende, i cui indirizzi sono visualizzati al solo scopo di rendere un servizio agli utenti del sito)