[Risolto] Aruba key su Ubuntu server 22.04
[Risolto] Aruba key su Ubuntu server 22.04
Ciao a tutti,
volevo gentilmente chiedere se era possibile usare la firma digitale di aruba key, tramite cmd su Ubuntu server 22.04 LTS, in modo da integrarla con il mio software gestionale, se si come posso fare?
Grazie mille a tutti per l’aiuto
volevo gentilmente chiedere se era possibile usare la firma digitale di aruba key, tramite cmd su Ubuntu server 22.04 LTS, in modo da integrarla con il mio software gestionale, se si come posso fare?
Grazie mille a tutti per l’aiuto
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Aruba key su Ubuntu server 22.04
Ciao, questa possibilità interessa anche me. Hai già letto queste istruzioni?
Sono poco chiare per chi è al mio livello terra terra, forse tu te la cavi meglio se hai scritto un gestionale che funziona da CLI
Io ho provato in una ubuntu 22.04:
Dopo ho seguito i passi che in modalità grafica fanno funzionare la ArubaKey:
mi sono procurato i driver libbit4xpki.so e opensc-pkcs11 per la smart card installando il deb contenuto nel file MU_LINUX.zip che ho scaricato dal sito di Aruba
Inoltre ho installato i pacchetti necessari per riconoscere e usare il lettore della smartcard. Prima ho installato le dipendenze:
poi ho scaricato MINILECTOR30_LINUX.zip sempre dal sito di Aruba, ne ho estratto il deb contenuto e l'ho installato. Così ora questa è la situazione:
Queste sono le righe che ho aggiunto al file /usr/lib/ssl/openssl.cnf che per il resto è "nativo"
ma a questo punto, con qualsiasi comando openssl ottengo questo errore:
intravedo un riferimento ai driver che ho linkato nel file di configurazione ma non ho idea di quale sia il problema
Se ci legge qualche esperto di openssl...
Sono poco chiare per chi è al mio livello terra terra, forse tu te la cavi meglio se hai scritto un gestionale che funziona da CLI
Io ho provato in una ubuntu 22.04:
Codice: Seleziona tutto
rai@VirtualBox:~$ openssl version
OpenSSL 3.0.2 15 Mar 2022 (Library: OpenSSL 3.0.2 15 Mar 2022)
rai@VirtualBox:~$
mi sono procurato i driver libbit4xpki.so e opensc-pkcs11 per la smart card installando il deb contenuto nel file MU_LINUX.zip che ho scaricato dal sito di Aruba
Inoltre ho installato i pacchetti necessari per riconoscere e usare il lettore della smartcard. Prima ho installato le dipendenze:
Codice: Seleziona tutto
sudo apt install pcscd libpcsclite1 pcsc-tools libccid
Codice: Seleziona tutto
rai@VirtualBox:~$ dpkg -l | grep -E "^ii.+libbit4xpki|pkcs11|libminilector"
ii libbit4xpki 1.4.10-696 amd64 Bit4id.smartcards (Middleware PKCS#11)
ii libminilector38u-ccid-bit4id 1.0.0 all PC/SC driver for the bit4id miniLector smart card readers family
ii opensc-pkcs11:amd64 0.22.0-1ubuntu2 amd64 Smart card utilities with support for PKCS#15 compatible cards
rai@VirtualBox:~$
rai@VirtualBox:~$ locate pkcs11.so
/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
[...]
rai@VirtualBox:~$ locate libbit4xpki.so
/usr/lib/bit4id/libbit4xpki.so
[...]
rai@VirtualBox:~$
Codice: Seleziona tutto
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/opensc-pkcs11.so
MODULE_PATH = /usr/lib/bit4id/libbit4xpki.so
Codice: Seleziona tutto
rai@VirtualBox:~$ openssl version
FATAL: Startup failure (dev note: apps_startup()) for openssl
4067014EED7F0000:error:1280006A:DSO support routines:dlfcn_bind_func:could not bind to the requested symbol name:../crypto/dso/dso_dlfcn.c:188:symname(bind_engine): /usr/lib/x86_64-linux-gnu/opensc-pkcs11.so: undefined symbol: bind_engine
4067014EED7F0000:error:1280006A:DSO support routines:DSO_bind_func:could not bind to the requested symbol name:../crypto/dso/dso_lib.c:176:
4067014EED7F0000:error:13000068:engine routines:dynamic_load:DSO failure:../crypto/engine/eng_dyn.c:435:
4067014EED7F0000:error:13000066:engine routines:int_engine_configure:engine configuration error:../crypto/engine/eng_cnf.c:139:section=pkcs11_section, name=dynamic_path, value=/usr/lib/x86_64-linux-gnu/opensc-pkcs11.so
4067014EED7F0000:error:0700006D:configuration file routines:module_run:module initialization error:../crypto/conf/conf_mod.c:243:module=engines, value=engine_section retcode=-1
rai@VirtualBox:~$
Se ci legge qualche esperto di openssl...
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Aruba key su Ubuntu server 22.04
Up. Diamo più visibilità a questa discussione.
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
Re: Aruba key su Ubuntu server 22.04
Ok a questo punto, invio una richiesta di aiuto all'autore (che tra l'altro è italiano) del codice che integra in OpenSSL il supporto CAdES . Vediamo che cosa mi rispondono. Magari, se riesco a farcela con openssl e la firma digitale, posso offrirmi di scrivergli un How To più alla portata di utenti normali (per ora dichiarono che si tratta di istruzioni "per esperti o sviluppatori")
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
[Risolto] Aruba key su Ubuntu server 22.04
Sono riuscito a fare funzionare da linea di comando la firma digitale con i certificati sulla ArubaKey.
Antonio, il gentile e disponibile estensore della pagina www.blia.it/firmadigitale/ e sviluppatore della integrazione del supporto CAdES in openssl, mi ha chiarito che le istruzioni di quella pagina sono da aggiornare e che i link a github che contiene sono superati.
Per *ubuntu 22.04 o superiore, come richiesto nel primo post da @Andspi, le cose sono semplificate perchè non è necessario patchare né compilare niente: si scarica tutto dai repo ufficiali, tranne i driver per la smart card e per il suo lettore.
Ecco i passaggi per firmare con openssl e la ArubaKey (anche se non posso fare le prove, penso che il sistema funzioni con qualsiasi provider di firma digitale, adattando i driver)
Installare i pacchetti necessari
Scaricare e installare i driver
· per la smart card # in base al formato del proprio chip
· per il lettore della smart card
Le tre operazioni seguenti (prelevare il certificato dalla smart card; creare un certificato binario; convertirlo in formato PEM) vanno ripetute ogni volta che che i certificati contenuti nella smart cart (o la stessa smart card) vengono rinnovati o sostituiti.
Prelevare dalla smart card il certificato tramite OpenSC
N.B. personalizzare il percorso dopo --module in base al driver per la propria smart card [il mio è Incard, per cui libbit4xpki.so]
dal precedente output prendere l'ID del certificato della Firma Digitale (qui: 123456789) per usarlo nel passaggio successivo
Creare un certificato in formato binario
N.B. sostituire 123456789 con l'ID del certificato appena ottenuto e personalizzare il percorso dopo --module in base al driver per la propria smart card [il mio è Incard, per cui libbit4xpki.so]
Convertire il certificato dal formato DER al formato PEM
Creare un file di configurazione alternativo
Aggiungere le seguenti righe in fondo al file /etc/ssl/openssl+pkcs11.cnf
N.B. personalizzare il percorso del driver se non è libbit4xpki.so
A questo punto possiamo firmare con il seguente comando
che non è comodissimo da usare, per cui conviene metterlo in uno script.
Io ho creato il seguente in cui basta personalizzare le variabili ID e cert
Sarebbe interessante che qualcuno provasse questo metodo con altre firme digitali. Se funziona si può fare una pagina wiki, che mi pare manchi
Antonio, il gentile e disponibile estensore della pagina www.blia.it/firmadigitale/ e sviluppatore della integrazione del supporto CAdES in openssl, mi ha chiarito che le istruzioni di quella pagina sono da aggiornare e che i link a github che contiene sono superati.
Per *ubuntu 22.04 o superiore, come richiesto nel primo post da @Andspi, le cose sono semplificate perchè non è necessario patchare né compilare niente: si scarica tutto dai repo ufficiali, tranne i driver per la smart card e per il suo lettore.
Ecco i passaggi per firmare con openssl e la ArubaKey (anche se non posso fare le prove, penso che il sistema funzioni con qualsiasi provider di firma digitale, adattando i driver)
Installare i pacchetti necessari
Codice: Seleziona tutto
sudo apt install pcscd libpcsclite1 pcsc-tools libccid # dipendenze dei driver del lettore
sudo apt install opensc # servirà per estrarre il certificato dalla smart card
sudo apt install libengine-pkcs11-openssl # è il motore openssl per crittografia con moduli pkcs11
Scaricare e installare i driver
· per la smart card # in base al formato del proprio chip
· per il lettore della smart card
Le tre operazioni seguenti (prelevare il certificato dalla smart card; creare un certificato binario; convertirlo in formato PEM) vanno ripetute ogni volta che che i certificati contenuti nella smart cart (o la stessa smart card) vengono rinnovati o sostituiti.
Prelevare dalla smart card il certificato tramite OpenSC
N.B. personalizzare il percorso dopo --module in base al driver per la propria smart card [il mio è Incard, per cui libbit4xpki.so]
Codice: Seleziona tutto
rai@VirtualBox:~$ pkcs11-tool -O --module /usr/lib/bit4id/libbit4xpki.so --login
Using slot 0 with a present token (0x0)
Logging in to "CNS".
Please enter User PIN:
Certificate Object; type = X.509 cert
label: CNS0
subject: DN: CN=..., ...
ID: 4...
Data object 1002
label: 'PDATA'
application: 'PDATA'
app_id: 2.0.68.65.84.65
flags: modifiable
Public Key Object; RSA 1024 bits
label: CNS0
ID: 4...
Usage: encrypt, verify
Access: none
Private Key Object; RSA
label: CNS0
ID: 4...
Usage: decrypt, sign
Access: sensitive, always sensitive, never extractable
Certificate Object; type = X.509 cert
label: DS User Certificate3
subject: DN: C=IT, ...
ID: 123456789
Private Key Object; RSA
label: DS User Private Key 3
ID: 123456789
Usage: sign
Access: always authenticate, sensitive, always sensitive, never extractable, local
Public Key Object; RSA 2048 bits
label: DS User Public Key3
ID: 123456789
Usage: encrypt, verify
Access: none
rai@VirtualBox:~$
Creare un certificato in formato binario
N.B. sostituire 123456789 con l'ID del certificato appena ottenuto e personalizzare il percorso dopo --module in base al driver per la propria smart card [il mio è Incard, per cui libbit4xpki.so]
Codice: Seleziona tutto
rai@VirtualBox:~$ pkcs11-tool -r -y cert -d 123456789 --module /usr/lib/bit4id/libbit4xpki.so --login -o $HOME/certificato.der
Using slot 0 with a present token (0x0)
Logging in to "CNS".
Please enter User PIN:
rai@VirtualBox:~$
Convertire il certificato dal formato DER al formato PEM
Codice: Seleziona tutto
rai@VirtualBox:~$ openssl x509 -inform der -in $HOME/certificato.der > $HOME/certificato.pem
rai@VirtualBox:~$
Creare un file di configurazione alternativo
Codice: Seleziona tutto
rai@VirtualBox:~$ sudo cp /etc/ssl/openssl.cnf /etc/ssl/openssl+pkcs11.cnf
rai@VirtualBox:~$
Aggiungere le seguenti righe in fondo al file /etc/ssl/openssl+pkcs11.cnf
N.B. personalizzare il percorso del driver se non è libbit4xpki.so
Codice: Seleziona tutto
# per firmare con la ArubaKey
#¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
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/bit4id/libbit4xpki.so
A questo punto possiamo firmare con il seguente comando
Codice: Seleziona tutto
export OPENSSL_CONF=/etc/ssl/openssl+pkcs11.cnf; openssl cms -nosmimecap -md sha256 -nodetach -binary -cades -stream -outform DER -sign -signer $HOME/certificato.pem -inkey 123456789 -keyform engine -in nostro_file_da_firmare -out file_firmato.p7m -engine pkcs11
Io ho creato il seguente in cui basta personalizzare le variabili ID e cert
Codice: Seleziona tutto
#!/bin/bash
doc="
Appone su file_da_firmare la firma digitale con modalità CAdES (formato .p7m)
Il file viene creato nella stessa cartella di quello originario, con estensione .p7m
Se nella cartella c'è un file con lo stesso nome ed estensione, non viene
sovrascritto perchè il file firmato prende un nuovo suffisso numerico.
Funziona solo con openssl 3.0.0 o superiore
Dipende da libengine-pkcs11-openssl; inoltre
richiede un file alternativo di configurazione di openssl per caricare
l'engine pkcs#11 per esempio: /etc/ssl/openssl+pkcs11.cnf
USO: $(basename "$0") file_da_firmare [file_da_firmare ...]
Opzioni: -h --help mostra questo help
"
# file di configurazione alternativo che importa in openssl l'engine pkcs#11
OPENSSL_CONF=/etc/ssl/openssl+pkcs11.cnf
NB="
Questa configurazione non può diventare quella default di openssl perchè
l'engine pkcs#11 va bene per firmare cades ma non per altri scopi,
come generare chiavi RSA"
if [[ $# -lt 1 || $1 = '-h' || $1 = '--help' || ! -e $OPENSSL_CONF ]]; then
echo "${doc}"
exit
fi
# questo valore va estratto a ogni rinnovo di certificati o di smart-card
ID=445334 # può essere ricavato con pkcs11-tool
# anche il certificato digitale può essere creato con pkcs11-tool
# e bisogna rifarlo a ogni rinnovo di certificati o di smart-card
cert=$HOME/certificato.pem # convertito con openssl x509 da un certificato digitale
export OPENSSL_CONF
for f in "$@"; do
if [ -f "$f" ]; then
outfile="$f.p7m"
num=""
while [ -f "$outfile" ]; do # se esiste già un file $outfile
((num++))
outfile="$f.$num.p7m" # aggiunge un suffisso numerico
done
openssl cms -nosmimecap -md sha256 -nodetach -binary -cades \
-stream -outform DER -sign -signer $cert -inkey $ID \
-keyform engine -in "$f" -out "$outfile" -engine pkcs11 &&
echo "Creato il file '$outfile'" || echo "ERRORE con il file '$f'"
echo
else
echo -e "ERRORE: $f non è un file\n"
fi
done
-
- Imperturbabile Insigne
- Messaggi: 2848
- Iscrizione: domenica 11 maggio 2008, 18:03
- Desktop: plasma
- Distribuzione: 22.04
- Località: Palermo
[Risolto] Aruba key su Ubuntu server 22.04
In seguito alla discussione
[Openssl] [engine pkcs11] Impossibile generare coppia di chiavi
ho assodato che importando l'engine pkcs#11 si modifica a basso livello "il motore" di openssl in un modo che non consente alcune operazioni, per esempio la generazione di chiavi RSA.
Pertanto ho corretto il post precedente. Ho lievemente modificato la procedura e lo script finale per lasciare che openssl usi sempre il suo file predefinito di configurazione, tranne quando lo si vuole usare per firmare digitalmente: solo in questo caso openssl leggerà un file di configurazione alternativo che contiene le personalizzazioni che fanno caricare l'engine pkcs11
[Openssl] [engine pkcs11] Impossibile generare coppia di chiavi
ho assodato che importando l'engine pkcs#11 si modifica a basso livello "il motore" di openssl in un modo che non consente alcune operazioni, per esempio la generazione di chiavi RSA.
Pertanto ho corretto il post precedente. Ho lievemente modificato la procedura e lo script finale per lasciare che openssl usi sempre il suo file predefinito di configurazione, tranne quando lo si vuole usare per firmare digitalmente: solo in questo caso openssl leggerà un file di configurazione alternativo che contiene le personalizzazioni che fanno caricare l'engine pkcs11
Chi c’è in linea
Visualizzano questa sezione: 0 utenti iscritti e 15 ospiti