Εργαλείο γραμμής εντολών 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