OpenSSL#
Warnung
Der Versuch, den privaten Schlüssel abzurufen, lässt OpenSSL abstürzen. Dies ist normal, da private Schlüssel nicht aus einer NetHSM extrahiert werden können. Möglicherweise möchten Sie stattdessen den öffentlichen Schlüssel abrufen (siehe Beispiel unten).
Motor#
Warnung
Wenn Sie eine Engine (libp11) der Version 0.4.12 oder älter verwenden, führt ein EdDSA-Schlüssel auf dem NetHSM dazu, dass OpenSSL keinen Schlüssel findet. Bei Version 0.4.12 und älter listet die Engine alle Schlüssel auf dem NetHSM auf, wenn ein Schlüssel angefordert wird. Wenn Sie einen Schlüssel nach Label oder ID suchen, wird empfohlen, Version 0.4.13 oder neuer zu verwenden oder libp11 aus den Quellen zu bauen. Die Engine-Binärdatei befindet sich in src/.libs/pkcs11.so
.
Die OpenSSL-Engine-Schnittstelle ist der alte Weg, um benutzerdefinierte Backends für OpenSSL zu implementieren, und ist in OpenSSL 3 veraltet. Dies ist immer noch der stabilste Weg, den NetHSM mit OpenSSL zu verwenden.
Sie müssen das PKCS#11-Modul einrichten, indem Sie diese Anweisungen befolgen.
Bauen Sie den Motor ein:
apt install libengine-pkcs11-openssl
dnf install openssl-pkcs11
pacman -S libp11
Als nächstes müssen Sie OpenSSL für die Verwendung der Engine konfigurieren. Dies geschieht, indem Sie die folgenden Zeilen in Ihre openssl.cnf
Datei einfügen:
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
Bemerkung
Sie können OpenSSL den Pfad der OpenSSL-Konfigurationsdatei mit Hilfe der Umgebungsvariablen OPENSSL_CONF
mitteilen.
Warnung
Wenn die Hauptkonfigurationsdatei von OpenSSL so verändert wird, dass sie nur diese Zeilen enthält, könnte dies andere Programme, die OpenSSL verwenden, stören. Daher sollten Sie eine separate Konfigurationsdatei für die Engine erstellen.
Ersetzen Sie /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so
durch den Pfad zu dem PKCS#11-Modul, das Sie zuvor installiert haben.
Ersetzen Sie /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so
durch den Pfad zu der von Ihnen installierten OpenSSL-Engine. Der Pfad variiert je nach Ihrer Distribution. Die Zahl in engines-3
entspricht Ihrer OpenSSL-Version. Unter Debian lautet der Pfad für die OpenSSL 3-Engine /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so
; unter Fedora lautet er /usr/lib64/engines-3/libpkcs11.so
.
Jetzt können Sie Schlüssel auf dem NetHSM verwenden, indem Sie PKCS#11 URIs, Beispiel:
engine:pkcs11:pkcs11:object=webserver;type=private
Dazu wird der Schlüssel webserver
verwendet.
Bemerkung
Sie können den Befehl p11tool
von GnuTLS <https://gnutls.org/> verwenden, um den vollständigen URI der Schlüssel zu erhalten:
p11tool --provider /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so --list-all
Beispiel-Befehl#
Abrufen des öffentlichen Schlüssels eines asymmetrischen Schlüsselpaares auf dem NetHSM :
openssl pkey -engine pkcs11 -inform ENGINE -in "pkcs11:object=webserver;type=public" -pubout
Anbieter#
Die OpenSSL-Provider-Schnittstelle ist der neue Weg, um eigene Backends für OpenSSL zu implementieren. Das pkcs11-provider Backend befindet sich noch in einem frühen Entwicklungsstadium.
Sie müssen das PKCS#11-Modul einrichten, indem Sie diese Anweisungen befolgen.
Installieren Sie den Anbieter. Für Fedora existiert ein Paket namens pkcs11-provider
. Für andere Linux-Distributionen müssen Sie es aus den Quellen erstellen.
Dann müssen Sie OpenSSL für die Verwendung des Anbieters konfigurieren. Dies geschieht, indem Sie die folgenden Zeilen in Ihre openssl.cnf
Datei einfügen:
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
Setzen Sie module
auf den Pfad des von Ihnen installierten Providers und pkcs11-module-path
auf den Pfad des von Ihnen installierten PKCS#11-Moduls.
Wenn Sie NetHSM als Standardanbieter festlegen möchten, können Sie default = pkcs11
zum Abschnitt provider_sect
hinzufügen.
Bemerkung
Sie können OpenSSL den Pfad der OpenSSL-Konfigurationsdatei mit Hilfe der Umgebungsvariablen OPENSSL_CONF
mitteilen.
Warnung
Wenn die Hauptkonfigurationsdatei von OpenSSL so geändert wird, dass sie nur diese Zeilen enthält, könnte dies andere Programme, die OpenSSL verwenden, stören. Daher sollten Sie eine separate Konfigurationsdatei für den Anbieter erstellen.
Dann können Sie Schlüssel auf dem NetHSM verwenden, indem Sie PKCS#11 URIs, Beispiel:
openssl pkey -provider pkcs11 -in "pkcs11:object=rsakey" -pubout
Wenn Sie NetHSM als Standardanbieter festlegen, können Sie das Argument -provider pkcs11
weglassen.
Bemerkung
Wenn Sie einen Schlüsseltyp manuell im URI festlegen, kann der Anbieter den Schlüssel derzeit nicht finden. Sie können den ;type=private
oder ;type=public
Teil des URIs weglassen, damit es funktioniert.