OpenSSL#

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

Η προσπάθεια ανάκτησης του ιδιωτικού κλειδιού θα οδηγήσει σε κατάρρευση του OpenSSL. Αυτό είναι φυσιολογικό επειδή τα ιδιωτικά κλειδιά δεν μπορούν να εξαχθούν από ένα NetHSM. Ίσως να θέλετε να ανακτήσετε το δημόσιο κλειδί (δείτε το παράδειγμα παρακάτω).

Κινητήρας#

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

Όταν χρησιμοποιείτε μια μηχανή (libp11) έκδοσης 0.4.12 ή παλαιότερη, η ύπαρξη ενός κλειδιού EdDSA στο NetHSM θα προκαλέσει το OpenSSL να μην βρει κανένα κλειδί. Στην έκδοση 0.4.12 και παλαιότερες, η μηχανή παραθέτει όλα τα κλειδιά στο NetHSM όταν ζητείται ένα κλειδί. Κατά την αναζήτηση ενός κλειδιού με βάση την ετικέτα ή το id, συνιστάται η χρήση της έκδοσης 0.4.13 ή νεότερης ή η κατασκευή libp11 από τον πηγαίο κώδικα. Το δυαδικό αρχείο της μηχανής θα βρίσκεται στο src/.libs/pkcs11.so.

Η διεπαφή μηχανής OpenSSL είναι ο παλιός τρόπος υλοποίησης προσαρμοσμένων backends για το OpenSSL και έχει καταργηθεί στο OpenSSL 3. Αυτός εξακολουθεί να είναι ο πιο σταθερός τρόπος χρήσης του NetHSM με το OpenSSL.

Θα πρέπει να ρυθμίσετε την ενότητα PKCS#11, ακολουθώντας τις παρακάτω οδηγίες ` <pkcs11-setup.html>`__.

Τοποθετήστε τον κινητήρα:

apt install libengine-pkcs11-openssl

Στη συνέχεια πρέπει να ρυθμίσετε το OpenSSL ώστε να χρησιμοποιεί τη μηχανή. Αυτό γίνεται προσθέτοντας τις ακόλουθες γραμμές στο αρχείο openssl.cnf:

openssl_conf = openssl_init

[openssl_init]
engines = engine_section

[engine_section]
pkcs11 = pkcs11_section

[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so
MODULE_PATH = /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so
init = 0

Σημείωση

Μπορείτε να καθορίσετε στο OpenSSL τη διαδρομή του αρχείου ρυθμίσεων του OpenSSL χρησιμοποιώντας τη μεταβλητή περιβάλλοντος OPENSSL_CONF.

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

Αν το κύριο αρχείο ρυθμίσεων του OpenSSL τροποποιηθεί ώστε να περιέχει μόνο αυτές τις γραμμές, θα μπορούσε να καταστρέψει άλλα προγράμματα που χρησιμοποιούν το OpenSSL. Έτσι, ίσως να θέλετε να δημιουργήσετε ένα ξεχωριστό αρχείο ρυθμίσεων για τη μηχανή.

Αντικαταστήστε το /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so με τη διαδρομή προς την ενότητα PKCS#11 που εγκαταστήσατε νωρίτερα.

Αντικαταστήστε το /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so με τη διαδρομή της μηχανής OpenSSL που εγκαταστήσατε. Η διαδρομή διαφέρει ανάλογα με τη διανομή σας. Ο αριθμός στο engines-3 αντιστοιχεί στην έκδοση του OpenSSL σας. Στο Debian η διαδρομή για τη μηχανή OpenSSL 3 είναι /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so, για το Fedora είναι /usr/lib64/engines-3/libpkcs11.so.

Τώρα μπορείτε να χρησιμοποιήσετε κλειδιά στο NetHSM χρησιμοποιώντας PKCS#11 URIs, παράδειγμα:

engine:pkcs11:pkcs11:object=webserver;type=private

Αυτό θα χρησιμοποιήσει το κλειδί webserver.

Σημείωση

Μπορείτε να χρησιμοποιήσετε την εντολή p11tool από το GnuTLS <https://gnutls.org/> για να λάβετε το πλήρες URI των κλειδιών:

p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so --list-all

Παράδειγμα εντολής#

Ανάκτηση του δημόσιου κλειδιού ενός ζεύγους ασύμμετρων κλειδιών στο NetHSM :

openssl pkey -engine pkcs11 -inform ENGINE -in "pkcs11:object=webserver;type=public" -pubout

Πάροχος#

Η διεπαφή παρόχου OpenSSL είναι ο νέος τρόπος για την υλοποίηση προσαρμοσμένων backends για το OpenSSL. Το pkcs11-provider backend βρίσκεται ακόμα σε πρώιμο στάδιο ανάπτυξης.

Θα πρέπει να ρυθμίσετε την ενότητα PKCS#11, ακολουθώντας τις παρακάτω οδηγίες ` <pkcs11-setup.html>`__.

Εγκαταστήστε τον πάροχο. Για το Fedora υπάρχει ένα πακέτο με το όνομα pkcs11-provider. Για άλλες διανομές Linux θα πρέπει να το κατασκευάσετε από τον πηγαίο κώδικα.

Στη συνέχεια, πρέπει να ρυθμίσετε το OpenSSL ώστε να χρησιμοποιεί τον πάροχο. Αυτό γίνεται προσθέτοντας τις ακόλουθες γραμμές στο αρχείο openssl.cnf:

openssl_conf = openssl_init

[openssl_init]
providers = provider_sect

[provider_sect]
pkcs11 = pkcs11_sect

[pkcs11_sect]
module = /home/sautax/git/pkcs11-provider/src/.libs/pkcs11.so
pkcs11-module-path = /usr/lib/libnethsm_pkcs11.so
activate = 1

Ορίστε το module στη διαδρομή του παρόχου που εγκαταστήσατε και το pkcs11-module-path στη διαδρομή της ενότητας PKCS#11 που εγκαταστήσατε.

Αν θέλετε να ορίσετε το NetHSM ως προεπιλεγμένο πάροχο, μπορείτε να προσθέσετε το default = pkcs11 στην ενότητα provider_sect.

Σημείωση

Μπορείτε να καθορίσετε στο OpenSSL τη διαδρομή του αρχείου ρυθμίσεων του OpenSSL χρησιμοποιώντας τη μεταβλητή περιβάλλοντος OPENSSL_CONF.

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

Αν το κύριο αρχείο ρυθμίσεων του OpenSSL τροποποιηθεί ώστε να περιέχει μόνο αυτές τις γραμμές, θα μπορούσε να καταστρέψει άλλα προγράμματα που χρησιμοποιούν το OpenSSL. Έτσι, ίσως να θέλετε να δημιουργήσετε ένα ξεχωριστό αρχείο ρυθμίσεων για τον πάροχο.

Στη συνέχεια, μπορείτε να χρησιμοποιήσετε κλειδιά στο NetHSM χρησιμοποιώντας τα URIs PKCS#11, παράδειγμα:

openssl pkey -provider pkcs11 -in "pkcs11:object=rsakey" -pubout

Εάν ορίσετε το NetHSM ως προεπιλεγμένο πάροχο, μπορείτε να παραλείψετε το όρισμα -provider pkcs11.

Σημείωση

Επί του παρόντος, όταν ο πάροχος δεν μπορεί να βρει το κλειδί όταν ορίζει χειροκίνητα έναν τύπο κλειδιού στο URI. Μπορείτε να παραλείψετε το μέρος ;type=private ή ;type=public του URI για να το κάνετε να λειτουργήσει.