Outil en ligne de commande de Nitropy#
Ce tutoriel démontre comment accéder au NetHMS via nitropy outil de ligne de commande, que vous devez télécharger et installer.
Note
Si vous utilisez une instance de démonstration NetHSM avec un certificat auto-signé, par exemple en utilisant l’image Docker, vous devrez utiliser l’option --no-verify-tls
pour nitropy
afin d’éviter la vérification du certificat.
Note
Tout d’abord, définissez la valeur de $NETHSM_HOST sur l’adresse IP ou l’URL de votre NetHSM. Notre serveur de démonstration est accessible à l’adresse https://nethsmdemo.nitrokey.com/.
Informations sur le dispositif & ; Statut#
$ 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
Approvisionnement#
Un nouveau NetHSM doit d’abord être approvisionné avec des phrases de passe et l’heure actuelle. La passphrase Admin est la passphrase de l’administrateur, qui est le super-utilisateur du NetHSM. La passphrase de déverrouillage est utilisée pour crypter le magasin de données confidentielles du NetHSM.
Note
L’instance de démonstration NetHSM à nethsmdemo.nitrokey.com est déjà provisionnée.
$ nitropy nethsm --host $NETHSM_HOST provision
NetHSM localhost:8443 provisioned
NetHSM peut être utilisé en mode Attended Boot et Unattended Boot.
En mode Attended Boot, la Unlock Passphrase doit être saisie à chaque démarrage, ce qui permet de chiffrer la mémoire de données. Pour des raisons de sécurité, ce mode est recommandé.
En mode Démarrage sans surveillance, aucune phrase de passe de déverrouillage n’est requise, le NetHSM peut donc démarrer sans surveillance et la mémoire de données est stockée en clair. Utilisez ce mode si vos exigences de disponibilité ne peuvent être satisfaites avec le mode Attended Boot.
Récupère le mode actuel :
$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot
Configuration for NetHSM localhost:8443:
Unattended boot: off
Activez le mode Unattended Boot :
$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on
Updated the unattended boot configuration for NetHSM localhost:8443
Gestion des utilisateurs#
Rôles#
La séparation des tâches peut être mise en œuvre en utilisant différents rôles. Chaque compte utilisateur configuré sur le NetHSM se voit attribuer l’un des rôles suivants. Vous trouverez ci-dessous une description de haut niveau des opérations autorisées par chaque rôle. Pour les détails spécifiques aux points d’accès, veuillez vous référer à la documentation de l’API REST.
R-Administrateur : Un compte utilisateur doté de ce rôle a accès à toutes les opérations fournies par l’API REST, à l’exception des opérations d’utilisation des clés, c’est-à-dire la signature et le décryptage des messages.
R-Opérateur : Un compte d’utilisateur avec ce rôle a accès à toutes les opérations d’utilisation des clés, à un sous-ensemble d’opérations de gestion des clés en lecture seule et à des opérations de gestion des utilisateurs permettant des changements uniquement pour leur propre compte.
R-Metrics : Un compte utilisateur avec ce rôle a accès aux opérations de métriques en lecture seule uniquement.
R-Backup : Un compte utilisateur avec ce rôle a accès aux opérations requises pour initier une sauvegarde du système uniquement.
Note : Dans les prochaines versions, des rôles supplémentaires pourront être introduits.
Création et suppression d’utilisateurs
Créez maintenant un nouvel utilisateur avec le rôle d’opérateur qui pourra être utilisé pour signer et décrypter les données. Notez que le NetHSM attribue un ID utilisateur aléatoire si nous ne le spécifions pas.
$ 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"
Gestion des clés#
Générer des clés#
Dans cette section, nous voulons utiliser une clé RSA pour déchiffrer des données en utilisant PKCS#1 et pour signer des données avec PSS en utilisant SHA256. Nous allons donc générer une nouvelle clé sur le NetHSM. Veillez à utiliser l’algorithme RSA et à sélectionner les mécanismes de clé RSA_Signature_PSS_SHA256 et RSA_Decryption_PKCS1. Si vous ne spécifiez pas d’ID de clé, le NetHSM générera un ID aléatoire pour la nouvelle clé.
$ 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
Clés d’importation#
Au lieu de générer une clé sur le NetHSM, vous pouvez également importer des clés privées existantes dans le 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
Clés de liste#
Pour s’assurer que la clé a été créée et que les paramètres de l’algorithme et du mécanisme sont corrects, nous pouvons interroger toutes les clés du 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
Afficher les détails de la clé#
Nous pouvons également demander la clé publique de la paire de clés générée :
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey
Pour pouvoir utiliser la clé avec OpenSSL, nous l’exportons sous forme de fichier PEM et la stockons sous le nom de public.pem :
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem
Nous pouvons inspecter la clé avec OpenSSL et l’utiliser pour le cryptage ou la vérification des signatures (comme décrit dans la section suivante) :
$ 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-----
Certificats de clé#
Il est possible de définir et d’interroger des certificats pour les clés stockées sur une instance 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
Demandes de signature de certificats de clés#
Le NetHSM prend en charge la génération de demandes de signature de certificats (CSR) pour les clés stockées :
$ 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
Opérations clés#
Nous pouvons chiffrer les données pour la clé stockée sur le NetHSM en utilisant OpenSSL. (public.pem est le fichier de clé publique que nous avons créé dans la section Afficher les détails de la clé).
$ 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!
De même, nous pouvons signer des données en utilisant la clé du NetHSM. Pour RSA et ECDSA, nous devons d’abord calculer un condensé :
$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest
Nous pouvons ensuite créer une signature à partir de ce condensé en utilisant le NetHSM :
$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig
Et ensuite utiliser OpenSSL pour vérifier la signature :
$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data
Verified OK
Création de sauvegardes#
Il est possible de créer une sauvegarde du NetHSM qui capture à la fois la configuration et les clés stockées. Pour créer une sauvegarde, vous devez d’abord définir une phrase de passe de sauvegarde qui sera utilisée pour chiffrer le fichier de sauvegarde :
$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase
Updated the backup passphrase for NetHSM localhost:8443
Maintenant vous devez créer un utilisateur avec le rôle 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
Ensuite, vous pouvez générer la sauvegarde et l’écrire dans un fichier :
$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup
Backup for localhost:8443 written to /tmp/backup
Restauration des sauvegardes#
Ce fichier de sauvegarde peut être restauré sur une instance NetHSM non provisionnée :
$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup
Backup restored on NetHSM localhost:8443
Mise à jour de NetHSM#
Avertissement
Une perte de données peut se produire en raison de l’installation d’une mise à jour bêta !
$ nitropy nethsm --host $NETHSM_HOST update /tmp/nethsm-update.img.cpio
Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443
Si vous souhaitez poursuivre l’installation, vous pouvez maintenant valider la mise à jour :
$ nitropy nethsm --host $NETHSM_HOST commit-update
Update successfully committed on NetHSM localhost:8443
Vous pouvez également annuler la mise à jour :
$ nitropy nethsm --host $NETHSM_HOST cancel-update
Update successfully cancelled on NetHSM localhost:8443