PKCS#11 z pkcs11-tool#
Ten przewodnik opisuje użycie sterownika PKCS#11 dla NetHSM. W przewodniku wykorzystano narzędzia z OpenSC. Zapoznaj się z ich dokumentacją, aby dowiedzieć się jak używać ich w swoim systemie operacyjnym.
Ważne
Ten sterownik to wciąż wczesna implementacja Proof of Concept, która implementuje tylko te funkcje, które są niezbędne do obsługi serwerów TLS.
Instalacja#
Zainstaluj prekompilowaną bibliotekę#
Pobierz archiwum z najnowszym wydaniem ze strony releases repozytorium. Użyj archiwum wydania, które zawiera nazwę twojego systemu operacyjnego w tytule.
Wypakuj pliki z pobranego archiwum za pomocą wybranego przez siebie programu archiwizującego.
Skopiuj wyodrębnioną bibliotekę do odpowiedniej ścieżki w Twoim systemie operacyjnym. Ścieżka zależy od instalacji i konfiguracji OpenSC.
Kompilacja z kodu źródłowego#
Ważne
Ten sterownik może być kompilowany tylko za pomocą oficjalnego kompilatora Go. Nie należy używać kompilatora GNU Go (GCC-Go). Proszę odnieść się do ich strony ` <https://go.dev/doc/install>` __, aby dowiedzieć się jak go zainstalować.
Pobierz archiwum z najnowszym wydaniem ze strony releases repozytorium. Użyj archiwum wydania, które zawiera Kod źródłowy w tytule.
Wypakuj pliki z pobranego archiwum za pomocą wybranego przez siebie programu archiwizującego.
W katalogu z rozpakowanym kodem źródłowym wykonaj następujące polecenie, aby skompilować bibliotekę.
./build.sh
./build.sh
Skopiuj wyodrębnioną bibliotekę do odpowiedniej ścieżki w Twoim systemie operacyjnym. Ścieżka zależy od instalacji i konfiguracji OpenSC.
Konfiguracja#
Plik konfiguracyjny p11nethsm.conf jest wymagany i służy do konfiguracji połączenia pomiędzy sterownikiem PKCS#11 a NetHSM.
Przykładowy plik konfiguracyjny wygląda następująco.
YAML 1.1
---
p11nethsm:
logfile: /tmp/p11nethsm.log
maxsessioncount: 5
debug: true
slots:
- label: NetHSM1
description: NetHSM Zone A
url: "https://nethsmdemo.nitrokey.com/api/v1"
# certSHA256:
# - "0C:66:DC:EB:4D:12:C3:24:FC:82:F4:1D:4C:16:44:12:1D:00:79:FF:36:96:65:E2:21:C4:36:94:F7:8E:22:89"
user: "operator"
password: "env:NETHSM_PASS"
Zmodyfikuj plik konfiguracyjny p11nethsm.conf zgodnie ze swoim środowiskiem.
Plik konfiguracyjny może zawierać wiele slotów, wewnątrz tablicy slots. Sloty reprezentują wiele wdrożeń NetHSM. Pole label slotu musi zawierać unikalną nazwę. Klucze url, user i password są obowiązkowe. Ze względów bezpieczeństwa zaleca się przekazanie hasła w zmiennej środowiskowej. W tym celu env:NETHSM_PASS jest przekazywane w kluczu password, gdzie NETHSM_PASS jest nazwą zmiennej środowiskowej zawierającej hasło. Klucz certSHA256 musi być ustawiony, jeżeli certyfikat TLS nie jest podpisany przez Certificate Authority (CA) znajdujący się w magazynie certyfikatów systemu operacyjnego.
Plik konfiguracyjny musi być zapisany albo w poniższych ścieżkach albo w katalogu, w którym jest wykonywana aplikacja.
$HOME/.nitrokey
/etc/nitrokey/
Zarządzanie kluczami#
Info#
Pokaż informacje o wersji cryptoki, oraz sterownika PKCS#11.
$ pkcs11-tool --module p11nethsm.so --show-info
Cryptoki version 2.40
Manufacturer Nitrokey GmbH
Library NetHSM PKCS#11 module (ver 0.1)
Using slot 0 with a present token (0x0)
Lista slotów#
Informacja o dostępnych slotach. Wymienione sloty zależą od konfiguracji tablicy slotów w pliku konfiguracyjnym p11nethsm.conf. Aby dowiedzieć się więcej o konfiguracji slotów, zapoznaj się z rozdziałem Konfiguracja.
$ pkcs11-tool --module p11nethsm.so --list-slots
Available slots:
Slot 0 (0x0): NetHSM Zone A
token label : NetHSM1
token manufacturer : Nitrokey GmbH
token model : NetHSM
token flags : rng, token initialized, PIN initialized, readonly
hardware version : 0.1
firmware version : 0.1
serial num : 0
pin min/max : 3/256
Informacja
Jeśli twoja konfiguracja obsługuje więcej niż jedno gniazdo, być może będziesz musiał dodać opcję –slot <arg> w poleceniach pkcs11-tool, aby użyć właściwego.
Wygeneruj klucz#
Wygeneruj parę kluczy i zapisz ją w pamięci NetHSM.
Informacja
Sterownik PKCS#11 obecnie nie obsługuje tej funkcji. Para kluczy może być wygenerowana za pomocą nitropy lub żądania REST API. Aby dowiedzieć się więcej o tym, jak wygenerować klucz, zapoznaj się z rozdziałem Generate Key.
Lista kluczy#
Wyświetlanie informacji o kluczach i certyfikatach w sklepie Key Store w urządzeniu NetHSM.
$ pkcs11-tool --module p11nethsm.so --list-objects
Using slot 0 with a present token (0x0)
Private Key Object; RSA
label: myFirstKey
ID: 6d7946697273744b6579
Usage: decrypt, sign
Access: sensitive, always sensitive, never extractable
Public Key Object; RSA 0 bits
label: myFirstKey
ID: 6d7946697273744b6579
Usage: none
Access: none
Czytaj Klucze#
Odczyt kluczy i certyfikatów z magazynu kluczy Key Store w urządzeniu NetHSM. Nie ma możliwości odczytu kluczy prywatnych z urządzenia NetHSM.
Klucz publiczny pary kluczy można odczytać w następujący sposób.
$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key
Certyfikat pary kluczy można odczytać w następujący sposób.
$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key
Zwracane certyfikaty lub klucze publiczne są zakodowane w ASN.1. Dane te można zdekodować za pomocą narzędzia dumpasn1, ponieważ zawierają one dane w formacie DER. Format DER może zostać przekonwertowany do formatu PEM za pomocą OpenSSL.
Napisz klucze#
Zapisywanie kluczy i certyfikatów w sklepie z kluczami Key Store w urządzeniu NetHSM.
Klucz prywatny pary kluczy można zapisać w następujący sposób.
$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey
Klucz publiczny pary kluczy można zapisać w następujący sposób.
$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey
Certyfikat pary kluczy można zapisać w następujący sposób.
$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey
Kluczowe operacje#
Szyfruj#
NetHSM nie może szyfrować danych za pomocą kluczy asymetrycznych, ale udostępnia klucz publiczny, który może być użyty do szyfrowania. Więcej informacji na temat pobierania klucza publicznego można znaleźć w rozdziale Show Key Details, lub pobrać klucz zgodnie z opisem w rozdziale Read Keys <pkcs11_with_pkcs11.html#read-keys>. Przykład zakłada istnienie klucza publicznego w pliku public.pem.
Dane można zaszyfrować za pomocą OpenSSL w następujący sposób.
$ echo 'NetHSM rulez!' | openssl pkeyutl -encrypt -pubin \
-inkey public.pem \
-pkeyopt rsa_padding_mode:oaep \
-pkeyopt rsa_oaep_md:sha512 \
-pkeyopt rsa_mgf1_md:sha512 \
-out encrypted.data
Odszyfrować#
NetHSM może odszyfrować dane za pomocą klucza prywatnego przechowywanego w sklepie Key Store na dysku NetHSM. W tym przykładzie użyto zaszyfrowanej wiadomości z poprzedniego rozdziału Encrypt.
$ pkcs11-tool --module p11nethsm.so --decrypt \
--mechanism RSA-PKCS-OAEP \
--input-file encrypted.data \
--label myFirstKey \
--hash-algorithm SHA512
NetHSM rulez!
Podpisać#
NetHSM może podpisywać dane kluczem prywatnym przechowywanym w Key Store na NetHSM. W przypadku podpisu kluczem RSA i ECDSA należy najpierw obliczyć skrót.
Do obliczenia skrótu potrzebne są najpierw dane. Wiadomość tworzona jest w następujący sposób.
$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
--sign \
--mechanism SHA512-RSA-PKCS-PSS \
--output-file sig.data \
--label myFirstKey
Utworzony podpis można zweryfikować za pomocą OpenSSL w następujący sposób.
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
-verify public.pem \
-sha512 \
-sigopt rsa_padding_mode:pss \
-sigopt rsa_pss_saltlen:-1 \
-signature sig.data