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