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

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.