OpenSSL

Avvertimento

Se si cerca di recuperare la chiave privata, OpenSSL si blocca. Questo è normale perché le chiavi private non possono essere estratte da un NetHSM. Si consiglia di recuperare invece la chiave pubblica (vedere l’esempio seguente).

Motore

Avvertimento

Quando si utilizza un motore (libp11) di versione 0.4.12 o precedente, la presenza di una chiave EdDSA sul NetHSM fa sì che OpenSSL non trovi alcuna chiave. Nelle versioni 0.4.12 e precedenti, il motore elenca tutte le chiavi sul NetHSM quando viene richiesta una chiave. Quando si cerca una chiave per etichetta o id, si raccomanda di usare la versione 0.4.13 o più recente, oppure di compilare libp11 dai sorgenti. Il binario del motore si trova in src/.libs/pkcs11.so.

L’interfaccia del motore OpenSSL è il vecchio modo di implementare backend personalizzati per OpenSSL ed è deprecato in OpenSSL 3. Questo è ancora il modo più stabile di usare NetHSM con OpenSSL.

È necessario impostare il modulo PKCS#11, seguendo queste istruzioni.

Installare il motore:

apt install libengine-pkcs11-openssl

È quindi necessario configurare OpenSSL per utilizzare il motore. Per farlo, aggiungere le seguenti righe al file openssl.cnf:

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/libpkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so
init = 0

Nota

È possibile specificare a OpenSSL il percorso del file di configurazione di OpenSSL usando la variabile di ambiente OPENSSL_CONF.

Avvertimento

Se il file di configurazione principale di OpenSSL viene modificato in modo da contenere solo queste righe, potrebbe interrompere altri programmi che utilizzano OpenSSL. Pertanto, si consiglia di creare un file di configurazione separato per il motore.

Sostituire /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so con il percorso del modulo PKCS#11 installato in precedenza.

Sostituire /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so con il percorso del motore OpenSSL installato. Il percorso varia a seconda della distribuzione. Il numero in engines-3 corrisponde alla versione di OpenSSL. Su Debian il percorso per il motore OpenSSL 3 è /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so; per Fedora è /usr/lib64/engines-3/libpkcs11.so.

Ora è possibile utilizzare le chiavi su NetHSM utilizzando gli URI PKCS#11, ad esempio:

engine:pkcs11:pkcs11:object=webserver;type=private

Si utilizzerà la chiave webserver.

Nota

È possibile utilizzare il comando p11tool da GnuTLS <https://gnutls.org/> per ottenere l’URI completo delle chiavi:

p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so --list-all

Esempio di comando

Recuperare la chiave pubblica di una coppia di chiavi asimmetriche sul NetHSM :

openssl pkey -engine pkcs11 -inform ENGINE -in "pkcs11:object=webserver;type=public" -pubout

Fornitore

L’interfaccia OpenSSL provider è il nuovo modo di implementare backend personalizzati per OpenSSL. Il backend pkcs11-provider è ancora in una fase iniziale di sviluppo.

È necessario impostare il modulo PKCS#11, seguendo queste istruzioni.

Installare il provider. Per Fedora esiste un pacchetto chiamato pkcs11-provider. Per altre distribuzioni Linux è necessario compilarlo dai sorgenti.

È quindi necessario configurare OpenSSL per utilizzare il provider. Per farlo, aggiungere le seguenti righe al file openssl.cnf:

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
pkcs11 = pkcs11_sect

[pkcs11_sect]
module = /home/sautax/git/pkcs11-provider/src/.libs/pkcs11.so
pkcs11-module-path = /usr/lib/libnethsm_pkcs11.so
activate = 1

Impostare module al percorso del provider installato e pkcs11-module-path al percorso del modulo PKCS#11 installato.

Se si desidera impostare NetHSM come provider predefinito, è possibile aggiungere default = pkcs11 alla sezione provider_sect.

Nota

È possibile specificare a OpenSSL il percorso del file di configurazione di OpenSSL usando la variabile di ambiente OPENSSL_CONF.

Avvertimento

Se il file di configurazione principale di OpenSSL viene modificato in modo da contenere solo queste righe, potrebbe interrompere altri programmi che utilizzano OpenSSL. Pertanto, si consiglia di creare un file di configurazione separato per il provider.

È quindi possibile utilizzare le chiavi sul NetHSM utilizzando gli URI PKCS#11, ad esempio:

openssl pkey -provider pkcs11 -in "pkcs11:object=rsakey" -pubout

Se si imposta NetHSM come provider predefinito, si può omettere l’argomento -provider pkcs11.

Nota

Attualmente, quando si imposta manualmente un tipo di chiave nell’URI, il provider non è in grado di trovare la chiave. È possibile omettere la parte ;type=private o ;type=public dell’URI per farlo funzionare.