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