Nitropy Kommandozeilenprogramm#
In diesem Tutorial wird gezeigt, wie man über das nitropy-Kommandozeilen-Tool, das Sie herunterladen und installieren müssen, auf das NetHMS zugreift.
Bemerkung
Wenn Sie eine NetHSM-Demo-Instanz mit einem selbstsignierten Zertifikat verwenden, zum Beispiel mit dem Docker-Image, müssen Sie die Option --no-verify-tls
für nitropy
verwenden, um die Zertifikatsprüfung zu überspringen.
Bemerkung
Setzen Sie zunächst den Wert von $NETHSM_HOST auf die IP-Adresse oder URL Ihres NetHSM. Unser Demoserver ist unter https://nethsmdemo.nitrokey.com/ zu erreichen.
Geräteinformationen & Status#
$ 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
Bereitstellung#
Ein neuer NetHSM muss zunächst mit Passphrasen und der aktuellen Uhrzeit eingerichtet werden. Die Admin-Passphrase ist die Passphrase des Administrators, der der Superuser des NetHSM ist. Die Unlock Passphrase wird verwendet, um den vertraulichen Datenspeicher des NetHSM zu verschlüsseln.
Bemerkung
Die NetHSM-Demo-Instanz unter nethsmdemo.nitrokey.com ist bereits eingerichtet.
$ nitropy nethsm --host $NETHSM_HOST provision
NetHSM localhost:8443 provisioned
NetHSM kann im Attended Boot-Modus und im Unattended Boot-Modus verwendet werden.
Im Modus Attended Boot muss bei jedem Start die Unlock Passphrase eingegeben werden, die zur Verschlüsselung des Datenspeichers verwendet wird. Aus Sicherheitsgründen wird dieser Modus empfohlen.
Im Modus Unattended Boot ist keine Unlock Passphrase erforderlich, daher kann der NetHSM unbeaufsichtigt starten und der Datenspeicher wird unverschlüsselt gespeichert. Verwenden Sie diesen Modus, wenn Ihre Verfügbarkeitsanforderungen mit dem Attended Boot-Modus nicht erfüllt werden können.
Ruft den aktuellen Modus ab:
$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot
Configuration for NetHSM localhost:8443:
Unattended boot: off
Schalten Sie den Modus „Unattended Boot“ ein:
$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on
Updated the unattended boot configuration for NetHSM localhost:8443
Benutzerverwaltung#
Rollen#
Die Aufgabentrennung kann durch die Verwendung verschiedener Rollen realisiert werden. Jedem auf dem NetHSM konfigurierten Benutzerkonto ist eine der folgenden Rollen zugewiesen. Nachfolgend finden Sie eine allgemeine Beschreibung der von jeder Rolle erlaubten Operationen. Endpunktspezifische Details entnehmen Sie bitte der REST-API-Dokumentation.
R-Verwalter: Ein Benutzerkonto mit dieser Rolle hat Zugriff auf alle von der REST-API bereitgestellten Operationen, mit Ausnahme der Schlüsselverwendungsoperationen, d. h. der Signierung und Entschlüsselung von Nachrichten.
R-Operator: Ein Benutzerkonto mit dieser Rolle hat Zugriff auf alle Schlüsselverwendungsvorgänge, eine schreibgeschützte Teilmenge der Schlüsselverwaltungsvorgänge und Benutzerverwaltungsvorgänge, die nur Änderungen am eigenen Konto zulassen.
R-Metrics: Ein Benutzerkonto mit dieser Rolle hat nur Zugriff auf schreibgeschützte Metrikoperationen.
R-Backup: Ein Benutzerkonto mit dieser Rolle hat nur Zugriff auf die Vorgänge, die zum Einleiten einer Systemsicherung erforderlich sind.
Hinweis: In einer zukünftigen Version können weitere Rollen eingeführt werden.
Anlegen & Löschen von Benutzern
Erstellen Sie nun einen neuen Benutzer mit der Rolle Operator, der zum Signieren und Entschlüsseln von Daten verwendet werden kann. Beachten Sie, dass der NetHSM eine zufällige Benutzer-ID zuweist, wenn wir sie nicht angeben.
$ 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"
Schlüsselverwaltung#
Schlüssel generieren#
In diesem Abschnitt wollen wir einen RSA-Schlüssel zum Entschlüsseln von Daten mit PKCS#1 und zum Signieren von Daten mit PSS mit SHA256 verwenden. Lassen Sie uns also einen neuen Schlüssel auf dem NetHSM generieren. Stellen Sie sicher, dass Sie den RSA-Algorithmus verwenden und die Schlüsselmechanismen RSA_Signature_PSS_SHA256 und RSA_Decryption_PKCS1 auswählen. Wenn Sie keine Schlüssel-ID angeben, generiert der NetHSM eine zufällige ID für den neuen Schlüssel.
$ 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
Schlüssel importieren#
Anstatt einen Schlüssel auf dem NetHSM zu generieren, können Sie auch vorhandene private Schlüssel in den NetHSM importieren:
$ 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
Schlüssel auflisten#
Um sicherzustellen, dass der Schlüssel erstellt wurde und die richtigen Algorithmus- und Mechanismuseinstellungen hat, können wir alle Schlüssel auf dem NetHSM abfragen:
$ 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
Schlüsseldetails anzeigen#
Wir können auch den öffentlichen Schlüssel des erzeugten Schlüsselpaares abfragen:
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey
Um den Schlüssel mit OpenSSL verwenden zu können, exportieren wir ihn als PEM-Datei und speichern ihn als public.pem:
$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem
Wir können den Schlüssel mit OpenSSL untersuchen und ihn zur Verschlüsselung oder Signaturprüfung verwenden (wie im nächsten Abschnitt beschrieben):
$ 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-----
Schlüssel-Zertifikate#
Es ist möglich, Zertifikate für die auf einer NetHSM-Instanz gespeicherten Schlüssel zu setzen und abzufragen:
$ 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
Signieranforderungen für Schlüsselzertifikate#
Der NetHSM unterstützt die Erzeugung von Certificate Signing Requests (CSR) für die gespeicherten Schlüssel:
$ 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
Wichtige Vorgänge#
Wir können Daten für den auf dem NetHSM gespeicherten Schlüssel mit OpenSSL verschlüsseln. (public.pem ist die öffentliche Schlüsseldatei, die wir im Abschnitt Schlüsseldetails anzeigen erstellt haben).
$ 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!
Auf ähnliche Weise können wir Daten mit dem Schlüssel auf dem NetHSM signieren. Für RSA und ECDSA müssen wir zuerst einen Digest berechnen:
$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest
Dann können wir mit dem NetHSM eine Signatur aus diesem Digest erstellen:
$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig
Und dann verwenden Sie OpenSSL, um die Signatur zu überprüfen:
$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data
Verified OK
Erstellen von Backups#
Es ist möglich, ein Backup des NetHSM zu erstellen, das sowohl die Konfiguration als auch die gespeicherten Schlüssel erfasst. Um ein Backup zu erstellen, müssen Sie zunächst eine Backup-Passphrase festlegen, die zur Verschlüsselung der Backup-Datei verwendet wird:
$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase
Updated the backup passphrase for NetHSM localhost:8443
Nun müssen Sie einen Benutzer mit der Rolle R-Backup anlegen:
$ 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
Dann können Sie die Sicherung erzeugen und in eine Datei schreiben:
$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup
Backup for localhost:8443 written to /tmp/backup
Wiederherstellung von Backups#
Diese Sicherungsdatei kann auf einer unprovisionierten NetHSM-Instanz wiederhergestellt werden:
$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup
Backup restored on NetHSM localhost:8443
NetHSM aktualisieren#
Warnung
Durch die Installation eines Beta-Updates kann es zu Datenverlusten kommen!
$ nitropy nethsm --host $NETHSM_HOST update /tmp/nethsm-update.img.cpio
Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443
Wenn Sie mit der Installation fortfahren möchten, können Sie das Update jetzt bestätigen:
$ nitropy nethsm --host $NETHSM_HOST commit-update
Update successfully committed on NetHSM localhost:8443
Alternativ können Sie das Update auch abbrechen:
$ nitropy nethsm --host $NETHSM_HOST cancel-update
Update successfully cancelled on NetHSM localhost:8443