Blia.it

| dal 2005 servizi gratuiti, giochi e tanto altro |
Novità:
Siamo lieti di annunciarvi che il 27/01/2019 gli sviluppatori di OpenSSL hanno approvato ed eseguito il
commit nel ramo ufficiale (
github.com/openssl/openssl) del nostro codice che integra in OpenSSL il
supporto CAdES e il
7/9/2021 è stata finalmente rilasciata la versione stabile di
OpenSSL 3.0 (vedi
annuncio).
D'ora in poi, quindi, non ci sarà più bisogno di applicare la patch ma sarà sufficiente scaricare e compilare
la versione ufficiale di OpenSSL 3, oppure installare le versioni più recenti delle distribuzioni Linux.
Grazie a tutti coloro che hanno contribuito a questo risultato con test e consigli.
La vecchia pagina delle istruzioni su come firmare con OpenSSL (versioni 1.1 e 1.0) l'abbiamo spostata qui
blia.it/firmadigitale/old.
Istruzioni
-
Prelevare il certificato tramite OpenSC (https://github.com/OpenSC)
Una volta installato OpenSC, ad esempio su Debian/Ubuntu: apt install opensc, eseguiamo:
pkcs11-tool -O --module /usr/lib/x64-athena/libASEP11.so --login (attenzione libASEP11.so è il driver delle smart-card con chip Athena (v. sotto), per le altre carte occore il driver pkcs11 apposito)
Using slot 0 with a present token (0x0)
Logging in to "CNS#5...".
Please enter User PIN:
Data object 655
label: 'PDATA'
application: ''
app_id:
flags:
Certificate Object; type = X.509 cert
label: Firma-Digitale
subject: DN: C=IT, O=...
ID: 12345678
Certificate Object; type = X.509 cert
label: CaRoot
subject: DN: C=IT, L=...
ID: 7...
Certificate Object; type = X.509 cert
label: CNS0
subject: DN: C=IT, O=...
ID: 4...
Public Key Object; RSA 2048 bits
label: Firma-Digitale
ID: 12345678
Usage: encrypt, verify, wrap
Access: local
Public Key Object; RSA 1024 bits
label: CNS0
ID: 4...
Usage: encrypt, verify
Access: local
Private Key Object; RSA
label: Firma-Digitale
ID: 12345678
Usage: decrypt, sign, unwrap
Access: sensitive, always sensitive, extractable, local
Private Key Object; RSA
label: CNS0
ID: 4...
Usage: decrypt, sign
Access: sensitive, always sensitive, never extractable, local
Prendiamo l'ID del certificato della Firma Digitale (nel nostro caso 12345678) ed estraiamo il certificato pubblico dalla carta e lo salviamo in certificato.der
pkcs11-tool -r -y cert -d 12345678 --module /usr/lib/x64-athena/libASEP11.so --login -o certificato.der
Convertiamo il certificato dal formato DER al formato PEM
openssl x509 -inform der -in certificato.der > certificato.pem
-
Installiamo l'engine pkcs11, ad esempio: apt install libengine-pkcs11-openssl
- 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/x86_64-linux-gnu/engines-3/pkcs11.so
MODULE_PATH = /usr/lib/x64-athena/libASEP11.so
(ovviamente i percorsi dei file possono cambiare)
- 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 12345678 -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 12345678 -keyform engine -inform der -in $1 -out $1.p7m -engine pkcs11 )
- siamo pronti per firmare: firma.sh miotesto.txt
-
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 smartcard" --width=300 \
--title="Firma digitale 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=12345678;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
Su Windows la procedura di firma è molto simile.
-
Su blia.it/firmadigitale/openssl.zip
c'è il file zippato contenente l'eseguibile (con supporto CAdES) e le librerie .dll
Su blia.it/firmadigitale/openssl3.2.zip
l'ultima versione di OpenSSL (3.2), ancora non testato.
-
Creiamo il solito file openssl.cnf dove inseriremo queste righe:
openssl_conf = openssl_def
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = pkcs11
MODULE_PATH = bit4ipki
p.s. non mettere l'estensione .dll, openssl l'aggiunge al file, quindi per l'engine pkcs11.dll inserire solo pkcs11
e cosí pure per bit4ipki
-
nel file firma.cmd scriviamo:
set OPENSSL_CONF=openssl.cnf
openssl cms -nosmimecap -md sha256 -nodetach -binary -cades -stream -outform DER -sign -signer certificato.pem -inkey 12345678 -keyform engine -in %1 -out %1.p7m -engine pkcs11
Driver PKCS#11
incryptoki2.dll (Incard)
bit4ipki.dll (Incard)
bit4opki.dll (Oberthur)
bit4xpki.dll (Incard e Oberthur)
bit4cpki.dll (HID)
bit4tpki.dll (HID)
OCSCryptoki.dll (Oberthur)
Cryptoki.dll (Oberthur)
asepkcs.dll (Athena)
SI_PKCS11.dll (Siemens)
CardOS_PKCS11.dll (Siemens)
cmP11.dll (CryptoVision)
cvP11_M4.dll (CryptoVision)
IpmPki32.dll (Siemens)
IPMpkiLC.dll (Siemens)
IpmPkiLU.dll (Siemens)
eTPKCS11.dll (SafeNet)
stPKCS11.dll (SafeNet)
inp11lib.dll (Incard)
opensc-pkcs11.dll (OpenSC)
SissP11.dll (Siemens)
aetpkss1.dll (Gemalto)
bit4p11.dll (Athena)
siecap11.dll (Siemens)
libbit4opki.so (Oberthur)
libbit4ipki.so (Incard)
libbit4xpki.so (Incard e Oberthur)
opensc-pkcs11.so (OpenSC)
libASEP11.so (Athena)
libeTPkcs11.so (SafeNet)
stPKCS11.so (SafeNet)
libsiecap11.so (Siemens)
libopensc.dylib (OpenSC)
libbit4xpki.dylib (Incard e Oberthur)
libbit4ipki.dylib (Incard)
libbit4opki.dylib (Oberthur)
libASEP11.dylib (Athena)
libeTPkcs11.dylib (SafeNet)
libaetpkss.dylib (Gemalto)
libOcsCryptoki.dylib (Oberthur)
Per riconoscere che tipo di carta avete guardate la forma del chip, qui di
sotto i chip della carte più diffuse in Italia:
Chip Athena
Chip Incard
Chip Oberthur
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.
Istruzioni per potere firmare un PDF in modalità PAdES li trovate
qui.
lo staff di Blia.it