OpenSSL#

Ostrzeżenie

Próba odzyskania klucza prywatnego spowoduje awarię OpenSSL. Jest to normalne, ponieważ kluczy prywatnych nie można wyodrębnić z NetHSM. Zamiast tego można pobrać klucz publiczny (patrz przykład poniżej).

Silnik#

Ostrzeżenie

Podczas korzystania z silnika (libp11) w wersji 0.4.12 lub starszej, posiadanie klucza EdDSA na NetHSM spowoduje, że OpenSSL nie znajdzie żadnego klucza. W wersji 0.4.12 i starszych silnik wyświetla listę wszystkich kluczy na NetHSM, gdy żądany jest klucz. Podczas wyszukiwania klucza według etykiety lub identyfikatora, zaleca się użycie wersji 0.4.13 lub nowszej, lub zbudowanie libp11 ze źródła. Plik binarny silnika będzie znajdował się w src/.libs/pkcs11.so.

Interfejs silnika OpenSSL jest starym sposobem implementacji niestandardowych backendów dla OpenSSL i jest przestarzały w OpenSSL 3. Jest to nadal najbardziej stabilny sposób korzystania z NetHSM z OpenSSL.

Będziesz musiał skonfigurować moduł PKCS#11, postępując zgodnie z tymi instrukcjami.

Zainstalować silnik:

apt install libengine-pkcs11-openssl

Następnie należy skonfigurować OpenSSL do korzystania z silnika. Odbywa się to poprzez dodanie następujących linii do pliku 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

Informacja

Możesz określić OpenSSL ścieżkę do pliku konfiguracyjnego OpenSSL za pomocą zmiennej środowiskowej OPENSSL_CONF.

Ostrzeżenie

Jeśli główny plik konfiguracyjny OpenSSL zostanie zmodyfikowany tak, aby zawierał tylko te linie, może to spowodować uszkodzenie innych programów korzystających z OpenSSL. Dlatego warto utworzyć osobny plik konfiguracyjny dla silnika.

Zastąp /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so ścieżką do zainstalowanego wcześniej modułu PKCS#11.

Zastąp /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so ścieżką do zainstalowanego silnika OpenSSL. Ścieżka różni się w zależności od dystrybucji. Liczba w engines-3 odpowiada wersji OpenSSL. W Debianie ścieżka do silnika OpenSSL 3 to /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so; dla Fedory jest to /usr/lib64/engines-3/libpkcs11.so.

Teraz można używać kluczy w NetHSM za pomocą PKCS#11 URI, przykład:

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

Spowoduje to użycie klucza webserver.

Informacja

Możesz użyć polecenia p11tool z GnuTLS <https://gnutls.org/>, aby uzyskać pełny URI kluczy:

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

Przykładowe polecenie#

Pobieranie klucza publicznego pary kluczy asymetrycznych w NetHSM:

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

Dostawca#

Interfejs dostawcy OpenSSL to nowy sposób implementacji niestandardowych backendów dla OpenSSL. Backend pkcs11-provider jest wciąż na wczesnym etapie rozwoju.

Będziesz musiał skonfigurować moduł PKCS#11, postępując zgodnie z tymi instrukcjami.

Zainstaluj dostawcę. Dla Fedory istnieje pakiet o nazwie pkcs11-provider. Dla innych dystrybucji Linuksa będziesz musiał zbudować go ze źródła.

Następnie należy skonfigurować OpenSSL do korzystania z dostawcy. Odbywa się to poprzez dodanie następujących linii do pliku 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

Ustaw module na ścieżkę zainstalowanego dostawcy i pkcs11-module-path na ścieżkę zainstalowanego modułu PKCS#11.

Jeśli chcesz ustawić NetHSM jako domyślnego dostawcę, możesz dodać default = pkcs11 do sekcji provider_sect.

Informacja

Możesz określić OpenSSL ścieżkę do pliku konfiguracyjnego OpenSSL za pomocą zmiennej środowiskowej OPENSSL_CONF.

Ostrzeżenie

Jeśli główny plik konfiguracyjny OpenSSL zostanie zmodyfikowany tak, aby zawierał tylko te linie, może to spowodować uszkodzenie innych programów korzystających z OpenSSL. Dlatego warto utworzyć osobny plik konfiguracyjny dla dostawcy.

Następnie można użyć kluczy w NetHSM za pomocą PKCS#11 URI, przykład:

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

Jeśli ustawisz NetHSM jako domyślnego dostawcę, możesz pominąć argument -provider pkcs11.

Informacja

Obecnie podczas ręcznego ustawiania typu klucza w URI dostawca nie będzie w stanie znaleźć klucza. Możesz pominąć ;type=private lub ;type=public część URI, aby działała.