Strumento a riga di comando Nitropy#
Questo tutorial dimostra come accedere al NetHMS tramite nitropia strumento a riga di comando, che è necessario scaricare e installare.
Nota
Se usate un’istanza demo di NetHSM con un certificato autofirmato, per esempio usando l’immagine Docker, dovrete usare l’opzione --no-verify-tls
per nitropy
per saltare il controllo del certificato.
Nota
Per prima cosa impostate il valore di $NETHSM_HOST sull’indirizzo IP o sull’URL del vostro NetHSM. Il nostro server demo è raggiungibile all’indirizzo https://nethsmdemo.nitrokey.com/
Informazioni sul dispositivo & Stato#
$ nitropy nethsm --host $NETHSM_HOST info
Host: localhost:8443
Vendor: Nitrokey GmbH
Product: NetHSM
$ nitropy nethsm --host $NETHSM_HOST state
NetHSM localhost:8443 is Unprovisioned
Approvvigionamento#
Un nuovo NetHSM deve essere prima approvvigionato con le passphrase e l’ora corrente. La Admin Passphrase è la passphrase dell”Administrator, che è il super utente del NetHSM. La Passphrase di sblocco è usata per criptare l’archivio di dati riservati del NetHSM.
Nota
L’istanza demo di NetHSM a nethsmdemo.nitrokey.com
è già fornita.
$ nitropy nethsm --host $NETHSM_HOST provision
NetHSM localhost:8443 provisioned
NetHSM può essere usato in modalità Attended Boot e Unattended Boot.
In modalità Attended Boot è necessario inserire la Unlock Passphrase durante ogni avvio, che è usata per crittografare l’archivio dati. Per ragioni di sicurezza questa modalità è raccomandata.
Nella modalità Unattended Boot non è richiesta alcuna Passphrase di sblocco, quindi il NetHSM può avviarsi senza sorveglianza e l’archivio dati è memorizzato in modo non criptato. Usa questa modalità se i tuoi requisiti di disponibilità non possono essere soddisfatti con la modalità Attended Boot.
Recupera la modalità corrente:
$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot
Configuration for NetHSM localhost:8443:
Unattended boot: off
Attivare la modalità «avvio non presidiato»:
$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on
Updated the unattended boot configuration for NetHSM localhost:8443
Gestione degli utenti#
Ruoli#
La separazione dei compiti può essere implementata utilizzando i Ruoli disponibili. Ogni account utente configurato sul NetHSM ha uno dei seguenti Ruoli assegnati ad esso. Di seguito è riportata una descrizione di alto livello delle operazioni consentite dai singoli Ruoli, per i dettagli specifici dell’endpoint si rimanda alla documentazione REST API.
R-Administrator: Un account utente con questo ruolo ha accesso a tutte le operazioni fornite dall’API REST, ad eccezione delle operazioni di utilizzo delle chiavi, cioè la firma e la decrittazione dei messaggi.
R-Operatore: Un account utente con questo ruolo ha accesso a tutte le operazioni di utilizzo delle chiavi, a un sottoinsieme di operazioni di gestione delle chiavi in sola lettura e alle operazioni di gestione degli utenti che consentono modifiche solo al proprio account.
R-Metriche: Un account utente con questo ruolo ha accesso solo alle operazioni di metrica in sola lettura.
R-Backup: Un account utente con questo ruolo ha accesso solo alle operazioni necessarie per avviare un backup del sistema.
Nota: nelle prossime versioni potrebbero essere introdotti altri ruoli.
Creazione e cancellazione di utenti
Ora create un nuovo utente con il ruolo di operatore che può essere usato per firmare e decifrare i dati. Notate che il NetHSM assegna un ID utente casuale se non lo specifichiamo.
$ nitropy nethsm --host $NETHSM_HOST add-user --real-name "Jane User" --role Operator
User Operator added to NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST delete-user "Jane User"
Gestione delle chiavi#
Generare le chiavi#
In questa guida, vogliamo usare una chiave RSA per decifrare i dati usando PKCS #1 e per firmare i dati con PSS usando SHA256. Quindi generiamo una nuova chiave sul NetHSM. Assicuratevi di usare l’algoritmo RSA
e di selezionare i meccanismi di chiave RSA_Signature_PSS_SHA256
e RSA_Decryption_PKCS1
. Se non si specifica un ID chiave, NetHSM genererà un ID casuale per la nuova chiave.
$ nitropy nethsm --host $NETHSM_HOST generate-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --length 2048 --key-id myFirstKey
Key myFirstKey generated on NetHSM localhost:8443
Importazione di chiavi#
Invece di generare una chiave sul NetHSM, potete anche importare chiavi private esistenti nel NetHSM:
$ nitropy nethsm --host $NETHSM_HOST add-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --key-id mySecondKey --public-exponent AQAB --prime-p "AOnWFZ+JrI/xOXJU04uYCZOiPVUWd6CSbVseEYrYQYxc7dVroePshz29tc+VEOUP5T0O8lXMEkjFAwjW6C9QTAsPyl6jwyOQluMRIkdN4/7BAg3HAMuGd7VmkGyYrnZWW54sLWp1JD6XJG33kF+9OSar9ETPoVyBgK5punfiUFEL" \
--prime-q "ANT1kWDdP9hZoFKT49dwdM/S+3ZDnxQa7kZk9p+JKU5RaU9e8pS2GOJljHwkES1FH6CUGeIaUi81tRKe2XZhe/163sEyMcxkaaRbBbTc1v6ZDKILFKKt4eX7LAQfhL/iFlgi6pcyUM8QDrm1QeFgGz11ChM0JuQw1WwkX06lg8iv"
Key mySecondKey added to NetHSM localhost:8443
Chiavi dell’elenco#
Per assicurarsi che la chiave sia stata creata e che abbia le impostazioni corrette dell’algoritmo e del meccanismo, possiamo interrogare tutte le chiavi sul NetHSM:
$ nitropy nethsm --host $NETHSM_HOST list-keys
Keys on NetHSM localhost:8443:
Key ID Algorithm Mechanisms Operations
---------- --------- ---------------------------------------------- ----------
myFirstKey RSA RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256 0
mySecondKey RSA RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256 0
Mostra dettagli chiave#
Possiamo anche interrogare la chiave pubblica della coppia di chiavi generata:
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey
Per poter utilizzare la chiave con OpenSSL, la esportiamo come file PEM e la memorizziamo come public.pem:
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem
Possiamo ispezionare la chiave con openssl
e usarla per la crittografia o la verifica della firma (come descritto nella prossima sezione):
$ openssl rsa -in public.pem -pubin -text
RSA Public-Key: (2048 bit)
Modulus:
00:c3:56:f5:09:cc:a9:3e:ca:16:2e:fb:d2:8b:9d:
a9:33:5a:87:8f:3f:7a:bb:8a:3d:62:9b:5d:56:84:
95:97:bb:97:f0:77:e2:c8:59:f2:b5:c6:b7:f5:b3:
76:69:a3:e8:f6:b7:35:f4:3c:52:6d:3c:a0:b6:a1:
e4:1a:32:05:1d:51:68:21:7d:fc:53:69:ec:bc:0b:
a0:db:63:b2:0e:47:00:03:4d:98:1f:ab:c0:7b:2e:
3c:8f:b6:36:ff:f0:db:80:26:f0:a6:af:30:2f:7b:
16:fd:5c:db:0f:2c:54:8a:26:2b:db:3d:78:49:4b:
7b:d1:60:ea:a7:f0:b4:5e:fc:33:ff:57:f8:83:fd:
12:64:8f:29:d1:94:96:9a:15:18:5d:04:ca:1c:29:
44:ad:42:31:c5:80:38:4c:eb:3b:b8:7e:17:27:5c:
69:a8:88:44:ea:d1:82:64:fe:51:31:47:97:a7:a9:
87:c3:13:c9:00:7a:b9:fb:6f:cc:66:4c:07:d7:68:
fa:78:68:9a:e7:87:1e:94:c6:27:92:5f:f2:7d:11:
44:11:b5:39:35:59:2c:cd:f9:4f:59:e3:56:93:1f:
94:20:fd:6b:23:0d:15:e6:4e:bb:84:a8:a5:0d:9f:
1c:90:ab:a8:10:04:50:12:c1:80:02:94:85:78:df:
d6:b3
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1b1CcypPsoWLvvSi52p
M1qHjz96u4o9YptdVoSVl7uX8HfiyFnytca39bN2aaPo9rc19DxSbTygtqHkGjIF
HVFoIX38U2nsvAug22OyDkcAA02YH6vAey48j7Y2//DbgCbwpq8wL3sW/VzbDyxU
iiYr2z14SUt70WDqp/C0Xvwz/1f4g/0SZI8p0ZSWmhUYXQTKHClErUIxxYA4TOs7
uH4XJ1xpqIhE6tGCZP5RMUeXp6mHwxPJAHq5+2/MZkwH12j6eGia54celMYnkl/y
fRFEEbU5NVkszflPWeNWkx+UIP1rIw0V5k67hKilDZ8ckKuoEARQEsGAApSFeN/W
swIDAQAB
-----END PUBLIC KEY-----
Certificati chiave#
È possibile impostare e interrogare i certificati per le chiavi memorizzate su un’istanza di NetHSM:
$ nitropy nethsm --host $NETHSM_HOST set-certificate myFirstKey --mime-type application/x-pem-file /tmp/cert.pem
Updated the certificate for key myFirstKey on NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST get-certificate myFirstKey > /tmp/cert.pem
Richieste di firma di certificati chiave#
Il NetHSM supporta la generazione di Certificate Signing Requests (CSR) per le chiavi memorizzate:
$ nitropy nethsm --host $NETHSM_HOST csr --key-id myFirstKey --country DE --state-or-province BE --locality Berlin --organization ACME --organizational-unit IT --common-name example.com --email-address it@example.com
Operazioni chiave#
È possibile crittografare i dati per la chiave memorizzata su NetHSM utilizzando OpenSSL. (public.pem è il file della chiave pubblica creato nella sezione Mostra dettagli della chiave).
$ echo 'NetHSM rulez!' | OpenSSL rsautl -encrypt -inkey public.pem -pubin | base64 > data.crypt
$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d
NetHSM rulez!
Allo stesso modo, possiamo firmare i dati usando la chiave sul NetHSM. Per RSA e ECDSA, dobbiamo prima calcolare un digest:
$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest
Poi possiamo creare una firma da questo digest usando il NetHSM:
$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig
Quindi utilizzare OpenSSL per verificare la firma:
$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data
Verified OK
Creazione di backup#
È possibile creare un backup del NetHSM che cattura sia la configurazione che le chiavi memorizzate. Per creare un backup, devi prima impostare una passphrase di backup che viene utilizzata per crittografare il file di backup:
$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase
Updated the backup passphrase for NetHSM localhost:8443
Ora dovete creare un utente con il ruolo R-Backup:
$ nitropy nethsm -h $NETHSM_HOST -u admin add-user --user-id backup --real-name "Backup User" --role backup
User backup added to NetHSM localhost:8443
Poi può generare il backup e scriverlo su un file:
$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup
Backup for localhost:8443 written to /tmp/backup
Ripristino dei backup#
Questo file di backup può essere ripristinato su un’istanza NetHSM non provvista:
$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup
Backup restored on NetHSM localhost:8443
Aggiornamento di NetHSM#
Avvertimento
L’installazione di un aggiornamento beta può comportare la perdita di dati!
$ nitropy nethsm --host $NETHSM_HOST update /tmp/nethsm-update.img.cpio
Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443
Se volete continuare con l’installazione, potete ora impegnare l’aggiornamento:
$ nitropy nethsm --host $NETHSM_HOST commit-update
Update successfully committed on NetHSM localhost:8443
In alternativa, è possibile annullare l’aggiornamento:
$ nitropy nethsm --host $NETHSM_HOST cancel-update
Update successfully cancelled on NetHSM localhost:8443