Εργαλείο γραμμής εντολών Nitropy#

Αυτό το σεμινάριο παρουσιάζει τον τρόπο πρόσβασης στο NetHMS μέσω του εργαλείου γραμμής εντολών nitropy, το οποίο πρέπει να κατεβάσετε και να εγκαταστήσετε.

Σημείωση

Εάν χρησιμοποιείτε μια demo instance του NetHSM με αυτο-υπογεγραμμένο πιστοποιητικό, για παράδειγμα χρησιμοποιώντας την εικόνα Docker, θα πρέπει να χρησιμοποιήσετε την επιλογή --no-verify-tls για nitropy για να παραλείψετε τον έλεγχο του πιστοποιητικού.

Σημείωση

Πρώτα ορίστε την τιμή του $NETHSM_HOST στη διεύθυνση IP ή τη διεύθυνση URL του NetHSM σας. Ο διακομιστής επίδειξης είναι προσβάσιμος στη διεύθυνση https://nethsmdemo.nitrokey.com/.

Πληροφορίες συσκευής & Κατάσταση#

$ 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

Παροχή υπηρεσιών#

Ένα νέο NetHSM πρέπει πρώτα να εφοδιαστεί με κωδικούς πρόσβασης και την τρέχουσα ώρα. Το Admin Passphrase είναι το passphrase του Administrator, ο οποίος είναι ο υπερ-χρήστης του NetHSM. Το Unlock Passphrase χρησιμοποιείται για την κρυπτογράφηση του χώρου αποθήκευσης εμπιστευτικών δεδομένων του NetHSM.

Σημείωση

Η παρουσία επίδειξης NetHSM στη διεύθυνση nethsmdemo.nitrokey.com είναι ήδη εφοδιασμένη.

$ nitropy nethsm --host $NETHSM_HOST provision

NetHSM localhost:8443 provisioned

Το NetHSM μπορεί να χρησιμοποιηθεί σε λειτουργία Αυτόνομης εκκίνησης και Αυτόνομης εκκίνησης.

  • Στη λειτουργία Attended Boot, η Unlock Passphrase πρέπει να εισάγεται κατά τη διάρκεια κάθε εκκίνησης, η οποία χρησιμοποιείται για την κρυπτογράφηση του χώρου αποθήκευσης δεδομένων. Για λόγους ασφαλείας, συνιστάται αυτή η λειτουργία.

  • Στη λειτουργία Ανεπίβλεπτη εκκίνηση δεν απαιτείται η φράση πρόσβασης ξεκλειδώματος, επομένως το NetHSM μπορεί να ξεκινήσει χωρίς επιτήρηση και η αποθήκευση δεδομένων αποθηκεύεται χωρίς κρυπτογράφηση. Χρησιμοποιήστε αυτή τη λειτουργία εάν οι απαιτήσεις σας για διαθεσιμότητα δεν μπορούν να ικανοποιηθούν με τη λειτουργία Αυτόνομης εκκίνησης.

Ανάκτηση της τρέχουσας λειτουργίας:

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

 Configuration for NetHSM localhost:8443:
 Unattended boot: off

Ενεργοποιήστε τη λειτουργία «Unattended Boot»:

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

 Updated the unattended boot configuration for NetHSM localhost:8443

Διαχείριση χρηστών#

Ρόλοι#

Ο διαχωρισμός των καθηκόντων μπορεί να υλοποιηθεί με τη χρήση διαφορετικών ρόλων. Σε κάθε λογαριασμό χρήστη που έχει διαμορφωθεί στο NetHSM έχει εκχωρηθεί ένας από τους ακόλουθους ρόλους. Ακολουθεί περιγραφή υψηλού επιπέδου των λειτουργιών που επιτρέπονται από κάθε Ρόλο. Για λεπτομέρειες σχετικά με το τελικό σημείο, ανατρέξτε στην τεκμηρίωση του API REST.

  • R-Administrator: Ένας λογαριασμός χρήστη με αυτό το Ρόλο έχει πρόσβαση σε όλες τις λειτουργίες που παρέχονται από το REST API, εκτός από τις λειτουργίες χρήσης κλειδιών, δηλαδή την υπογραφή και αποκρυπτογράφηση μηνυμάτων.

  • R-Operator: Ένας λογαριασμός χρήστη με αυτό το Ρόλο έχει πρόσβαση σε όλες τις λειτουργίες χρήσης κλειδιών, σε ένα υποσύνολο λειτουργιών διαχείρισης κλειδιών μόνο για ανάγνωση και σε λειτουργίες διαχείρισης χρηστών που επιτρέπουν αλλαγές μόνο στο δικό τους λογαριασμό.

  • R-Metrics: Ένας λογαριασμός χρήστη με αυτό το Ρόλο έχει πρόσβαση μόνο σε λειτουργίες μετρήσεων μόνο για ανάγνωση.

  • R-Backup: Ένας λογαριασμός χρήστη με αυτό το Ρόλο έχει πρόσβαση μόνο στις λειτουργίες που απαιτούνται για την έναρξη ενός αντιγράφου ασφαλείας του συστήματος.

Σημείωση: Σε μελλοντικές εκδόσεις, ενδέχεται να εισαχθούν πρόσθετοι ρόλοι.

Δημιουργία & διαγραφή χρηστών

Τώρα δημιουργήστε έναν νέο χρήστη με το ρόλο Operator που μπορεί να χρησιμοποιηθεί για την υπογραφή και αποκρυπτογράφηση δεδομένων. Σημειώστε ότι το NetHSM εκχωρεί ένα τυχαίο αναγνωριστικό χρήστη αν δεν το καθορίσουμε.

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

Διαχείριση κλειδιών#

Δημιουργία κλειδιών#

Σε αυτή την ενότητα, θέλουμε να χρησιμοποιήσουμε ένα κλειδί RSA για την αποκρυπτογράφηση δεδομένων χρησιμοποιώντας PKCS#1 και για την υπογραφή δεδομένων με PSS χρησιμοποιώντας SHA256. Ας δημιουργήσουμε λοιπόν ένα νέο κλειδί στο NetHSM. Βεβαιωθείτε ότι χρησιμοποιείτε τον αλγόριθμο RSA και ότι επιλέγετε τους μηχανισμούς κλειδιών RSA_Signature_PSS_SHA256 και RSA_Decryption_PKCS1. Εάν δεν καθορίσετε αναγνωριστικό κλειδιού, το NetHSM θα δημιουργήσει ένα τυχαίο αναγνωριστικό για το νέο κλειδί.

$ 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

Εισαγωγή κλειδιών#

Αντί να δημιουργήσετε ένα κλειδί στο NetHSM, μπορείτε επίσης να εισαγάγετε υπάρχοντα ιδιωτικά κλειδιά στο 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

Λίστα κλειδιών#

Για να βεβαιωθούμε ότι το κλειδί έχει δημιουργηθεί και έχει τις σωστές ρυθμίσεις αλγορίθμου και μηχανισμού, μπορούμε να ζητήσουμε όλα τα κλειδιά στο 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

Εμφάνιση λεπτομερειών κλειδιού#

Μπορούμε επίσης να ζητήσουμε το δημόσιο κλειδί του παραγόμενου ζεύγους κλειδιών:

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

Για να μπορέσουμε να χρησιμοποιήσουμε το κλειδί με το OpenSSL, το εξάγουμε ως αρχείο PEM και το αποθηκεύουμε ως public.pem:

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

Μπορούμε να επιθεωρήσουμε το κλειδί με το OpenSSL και να το χρησιμοποιήσουμε για κρυπτογράφηση ή επαλήθευση υπογραφής (όπως περιγράφεται στην επόμενη ενότητα):

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

Πιστοποιητικά κλειδιών#

Είναι δυνατή η ρύθμιση και η αναζήτηση πιστοποιητικών για τα κλειδιά που είναι αποθηκευμένα σε μια περίπτωση 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

Αιτήματα υπογραφής πιστοποιητικού κλειδιού#

Το NetHSM υποστηρίζει τη δημιουργία αιτήσεων υπογραφής πιστοποιητικών (CSR) για τα αποθηκευμένα κλειδιά:

$ 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

Βασικές λειτουργίες#

Μπορούμε να κρυπτογραφήσουμε δεδομένα για το κλειδί που είναι αποθηκευμένο στο NetHSM χρησιμοποιώντας το OpenSSL. (Το public.pem είναι το αρχείο δημόσιου κλειδιού που δημιουργήσαμε στην ενότητα 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!

Ομοίως, μπορούμε να υπογράψουμε δεδομένα χρησιμοποιώντας το κλειδί στο NetHSM. Για RSA και ECDSA, πρέπει πρώτα να υπολογίσουμε μια σύνοψη:

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

Στη συνέχεια, μπορούμε να δημιουργήσουμε μια υπογραφή από αυτό το digest χρησιμοποιώντας το NetHSM:

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

Και στη συνέχεια χρησιμοποιήστε το OpenSSL για να επαληθεύσετε την υπογραφή:

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

Verified OK

Δημιουργία αντιγράφων ασφαλείας#

Είναι δυνατό να δημιουργήσετε ένα αντίγραφο ασφαλείας του NetHSM που να αποτυπώνει τόσο τη διαμόρφωση όσο και τα αποθηκευμένα κλειδιά. Για να δημιουργήσετε ένα αντίγραφο ασφαλείας, πρέπει πρώτα να ορίσετε μια φράση πρόσβασης για το αντίγραφο ασφαλείας, η οποία χρησιμοποιείται για την κρυπτογράφηση του αρχείου αντιγράφου ασφαλείας:

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

Updated the backup passphrase for NetHSM localhost:8443

Τώρα πρέπει να δημιουργήσετε έναν χρήστη με τον ρόλο 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

Στη συνέχεια, μπορείτε να δημιουργήσετε το αντίγραφο ασφαλείας και να το γράψετε σε ένα αρχείο:

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

Backup for localhost:8443 written to /tmp/backup

Επαναφορά αντιγράφων ασφαλείας#

Αυτό το αρχείο αντιγράφων ασφαλείας μπορεί να αποκατασταθεί σε μια μη προβεβλημένη περίπτωση NetHSM:

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

Backup restored on NetHSM localhost:8443

Ενημέρωση του NetHSM#

Προειδοποίηση

Ενδέχεται να προκληθεί απώλεια δεδομένων λόγω της εγκατάστασης μιας ενημέρωσης beta!

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

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

Αν θέλετε να συνεχίσετε την εγκατάσταση, μπορείτε τώρα να δεσμεύσετε την ενημέρωση:

$ nitropy nethsm --host $NETHSM_HOST     commit-update

Update successfully committed on NetHSM localhost:8443

Εναλλακτικά, μπορείτε να ακυρώσετε την ενημέρωση:

$ nitropy nethsm --host $NETHSM_HOST  cancel-update

Update successfully cancelled on NetHSM localhost:8443