Blia.it NON utilizza cookie proprietari (v. informativa)
Blia.it

Istruzioni per firmare digitalmente (CAdES compatibile)

in ambiente Linux con Openssl e smartcard (per esperti o sviluppatori)


Software da scaricare:

Sorgenti di Openssl v.1.0.1g
Patch realizzata da noi per il supporto CAdES di Openssl
Engine PKCS11 per Openssl (sudo apt-get install libengine-pkcs11-openssl)

oppure, se volete usare il nuovo openssl 1.1.0
Sorgenti di Openssl v.1.1.0
Patch per openssl 1.1.0
Engine PKCS11 per Openssl 1.1.0 (sudo apt-get install libp11-2)

Opensc (sudo apt-get install opensc)
Driver PKCS11 del costruttore della smart card

  1. Per prima cosa dobbiamo applicare la patch e compilare openssl
    - patch -Np1 -r /dev/null < cades.patch
    - ./config && make && sudo make install

  2. assicuriamoci che la versione di openssl con la patch sia stata compilata correttamente eseguendo il comando /usr/local/ssl/bin/openssl cms ? tra le varie opzioni dovremmo trovare -cades, se sì, openssl è pronto

  3. procuriamoci alcuni dati che ci serviranno successivamente:
    - pkcs11-tool --module libbit4ipki.so -O (elenca gli oggetti presenti nella smart card), dovremmo trovarci qualcosa del genere:
    Certificate Object, type = X.509 cert
    label:      DS User Certificate1
    ID:         123456
    
    - prendiamo nota dell'ID della chiave/certificato 123456
    - scarichiamo il certificato con pkcs11-tool --module libbit4ipki.so -r --type cert --id 123456 > certificato.der
    - convertiamo il certificato dal formato binario (DER) al formato test (PEM) con openssl x509 -in certificato.der -inform der -text -out certificato.pem

  4. 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/lib/ssl/engines/engine_pkcs11.so
    MODULE_PATH = /usr/lib/libbit4ipki.so
    
    (ovviamente i percorsi dei file possono cambiare)

  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 123456 -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 123456 -keyform engine -inform der -in $1 -out $1.p7m -engine pkcs11 )
  6. siamo pronti per firmare: firma.sh miotesto.txt

Per dubbi, commenti e proposte potete usare l'email in fondo alla pagina.

lo staff di Blia.it