Instrumentul de linie de comandă Nitropy#

Acest tutorial demonstrează cum să accesați NetHMS prin intermediul nitropy instrument de linie de comandă, pe care trebuie să îl descărcați și să îl instalați.

Notă

Dacă utilizați o instanță demo NetHSM cu un certificat autofirmat, de exemplu, utilizând imaginea Docker, va trebui să utilizați opțiunea --no-verify-tls pentru nitropy pentru a sări peste verificarea certificatului.

Notă

În primul rând, setați valoarea $NETHSM_HOST la adresa IP sau URL a NetHSM-ului dumneavoastră. Serverul nostru demonstrativ poate fi accesat la https://nethsmdemo.nitrokey.com/

Informații despre dispozitiv & Stare#

$ 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

Aprovizionare#

Un nou NetHSM trebuie mai întâi să fie provizionat cu fraze de acces și ora curentă. Pasafaza Admin este fraza de acces a administratorului, care este superutilizatorul NetHSM. Unlock Passphrase (Fraza de deblocare) este utilizată pentru a cripta stocul de date confidențiale al NetHSM.

Notă

Instanța demo NetHSM de la nethsmdemo.nitrokey.com este deja provizionată.

$ nitropy nethsm --host $NETHSM_HOST provision

NetHSM localhost:8443 provisioned

NetHSM poate fi utilizat în modul Attended Boot și Unattended Boot.

  • În modul Attended Boot, la fiecare pornire trebuie introdusă Unlock Passphrase (fraza de deblocare), care este utilizată pentru a cripta stocul de date. Din motive de securitate, acest mod este recomandat.

  • În modul Unattended Boot nu este necesară nicio frază de deblocare, prin urmare NetHSM poate porni nesupravegheat, iar stocul de date este stocat necriptat. Folosiți acest mod dacă cerințele dvs. de disponibilitate nu pot fi îndeplinite cu modul Attended Boot.

Preluarea modului curent:

$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot

 Configuration for NetHSM localhost:8443:
 Unattended boot: off

Activați modul Unattended Boot:

$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on

 Updated the unattended boot configuration for NetHSM localhost:8443

Gestionarea utilizatorilor#

Roluri#

Separarea sarcinilor poate fi implementată prin utilizarea de roluri diferite. Fiecărui cont de utilizator configurat pe NetHSM îi este atribuit unul dintre următoarele Roluri. În continuare este prezentată o descriere la nivel înalt a operațiunilor permise de fiecare Rol. Pentru detalii specifice fiecărui punct final, consultați documentația REST API.

  • R-Administrator: Un cont de utilizator cu acest rol are acces la toate operațiunile furnizate de API REST, cu excepția operațiunilor de utilizare a cheilor, adică semnarea și decriptarea mesajelor.

  • R-Operator: Un cont de utilizator cu acest rol are acces la toate operațiunile de utilizare a cheilor, la un subset de operațiuni de gestionare a cheilor de numai citire și la operațiuni de gestionare a utilizatorilor care permit modificări numai pentru propriul cont.

  • R-Metrice: Un cont de utilizator cu acest rol are acces numai la operațiunile de citire a măsurătorilor.

  • R-Backup: Un cont de utilizator cu acest rol are acces numai la operațiunile necesare pentru a iniția o copie de rezervă a sistemului.

Notă: În versiunile viitoare, pot fi introduse roluri suplimentare.

Crearea și ștergerea utilizatorilor

Acum creați un nou utilizator cu rolul Operator care poate fi folosit pentru a semna și decripta date. Rețineți că NetHSM atribuie un ID de utilizator aleatoriu dacă nu îl specificăm.

$ 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"

Managementul cheilor#

Generarea cheilor#

În această secțiune, dorim să folosim o cheie RSA pentru a decripta date utilizând PKCS#1 și pentru a semna date cu PSS utilizând SHA256. Să generăm deci o nouă cheie pe NetHSM. Asigurați-vă că folosiți algoritmul RSA și că selectați mecanismele de chei RSA_Signature_PSS_SHA256 și RSA_Decryption_PKCS1. Dacă nu specificați un ID al cheii, NetHSM va genera un ID aleatoriu pentru noua cheie.

$ 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

Chei de import#

În loc să generați o cheie pe NetHSM, puteți, de asemenea, să importați chei private existente în 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

Chei de listă#

Pentru a ne asigura că cheia a fost creată și că are parametrii corecți de algoritm și mecanism, putem interoga toate cheile de pe 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

Afișați detalii cheie#

De asemenea, putem interoga cheia publică a perechii de chei generate:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey

Pentru a putea utiliza cheia cu OpenSSL, o exportăm ca fișier PEM și o stocăm ca public.pem:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem

Putem inspecta cheia cu OpenSSL și o putem utiliza pentru criptare sau pentru verificarea semnăturilor (așa cum este descris în secțiunea următoare):

$ 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-----

Certificatele cheie#

Este posibil să setați și să interogați certificate pentru cheile stocate într-o instanță 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

Cereri de semnare a certificatelor cheie#

NetHSM acceptă generarea de cereri de semnare a certificatelor (CSR) pentru cheile stocate:

$ 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

Operațiuni cheie#

Putem cripta datele pentru cheia stocată pe NetHSM folosind OpenSSL. (public.pem este fișierul cu cheia publică pe care l-am creat în secțiunea Show Key Details).

$ 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!

În mod similar, putem semna datele utilizând cheia de pe NetHSM. Pentru RSA și ECDSA, trebuie să calculăm mai întâi un compendiu:

$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest

Apoi, putem crea o semnătură din acest compendiu folosind NetHSM:

$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig

Apoi, utilizați OpenSSL pentru a verifica semnătura:

$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data

Verified OK

Crearea de copii de rezervă#

Este posibil să se creeze o copie de rezervă a NetHSM care să cuprindă atât configurația, cât și cheile stocate. Pentru a crea o copie de rezervă, trebuie mai întâi să setați o frază de trecere de rezervă care este utilizată pentru a cripta fișierul de rezervă:

$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase

Updated the backup passphrase for NetHSM localhost:8443

Acum trebuie să creați un utilizator cu rolul 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

Apoi puteți genera copia de rezervă și o puteți scrie într-un fișier:

$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup

Backup for localhost:8443 written to /tmp/backup

Restaurarea copiilor de rezervă#

Acest fișier de rezervă poate fi restaurat pe o instanță NetHSM neaprovizionată:

$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup

Backup restored on NetHSM localhost:8443

Actualizarea NetHSM#

Atenționare

Este posibil să apară pierderi de date din cauza instalării unei actualizări beta!

$ nitropy nethsm --host $NETHSM_HOST  update /tmp/nethsm-update.img.cpio

Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443

Dacă doriți să continuați instalarea, puteți confirma actualizarea:

$ nitropy nethsm --host $NETHSM_HOST     commit-update

Update successfully committed on NetHSM localhost:8443

Alternativ, puteți anula actualizarea:

$ nitropy nethsm --host $NETHSM_HOST  cancel-update

Update successfully cancelled on NetHSM localhost:8443