OpenSSL#

Waarschuwing

Bij het ophalen van de privésleutel crasht OpenSSL. Dit is normaal omdat privésleutels niet uit een NetHSM gehaald kunnen worden. In plaats daarvan is het misschien beter om de publieke sleutel op te halen (zie onderstaand voorbeeld).

Motor#

Waarschuwing

Bij gebruik van een engine (libp11) versie 0.4.12 of ouder, zorgt het hebben van een EdDSA-sleutel op de NetHSM ervoor dat OpenSSL geen sleutel vindt. Op versie 0.4.12 en ouder geeft de engine een lijst van alle sleutels op de NetHSM wanneer een sleutel wordt aangevraagd. Bij het zoeken naar een sleutel op label of id, wordt het aangeraden om versie 0.4.13 of nieuwer te gebruiken, of libp11 vanaf broncode te bouwen. De binaire engine staat in src/.libs/pkcs11.so.

De OpenSSL engine interface is de oude manier om aangepaste backends voor OpenSSL te implementeren en het is verouderd in OpenSSL 3. Dit is nog steeds de meest stabiele manier om de NetHSM met OpenSSL te gebruiken.

U moet de PKCS#11 module instellen volgens deze instructies.

Installeer de motor:

apt install libengine-pkcs11-openssl

Vervolgens moet je OpenSSL configureren om de engine te gebruiken. Dit wordt gedaan door de volgende regels toe te voegen aan uw openssl.cnf bestand:

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

Notitie

U kunt OpenSSL het pad van het OpenSSL-configuratiebestand geven met de OPENSSL_CONF omgevingsvariabele.

Waarschuwing

Als het hoofdconfiguratiebestand van OpenSSL zodanig wordt aangepast dat het alleen deze regels bevat, kan dit andere programma’s die OpenSSL gebruiken kapot maken. Daarom is het misschien beter om een apart instellingenbestand voor de engine te maken.

Vervang /usr/lib/x86_64-linux-gnu/pkcs11/libnethsm_pkcs11.so door het pad naar de PKCS#11 module die je eerder hebt geïnstalleerd.

Vervang /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so door het pad naar de OpenSSL engine die je hebt geïnstalleerd. Het pad varieert afhankelijk van je distributie. Het nummer in engines-3 komt overeen met je OpenSSL versie. Op Debian is het pad voor de OpenSSL 3 engine /usr/lib/x86_64-linux-gnu/engines-3/libpkcs11.so; voor Fedora is het /usr/lib64/engines-3/libpkcs11.so.

Nu kun je sleutels gebruiken op de NetHSM door PKCS#11 URI’s te gebruiken, bijvoorbeeld:

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

Dit gebruikt de sleutel webserver.

Notitie

Je kunt het p11tool commando van GnuTLS <https://gnutls.org/> gebruiken om de volledige URI van de sleutels te krijgen:

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

Voorbeeldopdracht#

De openbare sleutel van een asymmetrisch sleutelpaar op de NetHSM ophalen :

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

Aanbieder#

De OpenSSL provider interface is de nieuwe manier om aangepaste backends voor OpenSSL te implementeren. De pkcs11-provider backend is nog in een vroeg stadium van ontwikkeling.

U moet de PKCS#11 module instellen volgens deze instructies.

Installeer de provider. Voor Fedora bestaat er een pakket met de naam pkcs11-provider. Voor andere Linux distributies zul je moeten bouwen vanaf de bron.

Daarna moet je OpenSSL configureren om de provider te gebruiken. Dit doe je door de volgende regels toe te voegen aan je openssl.cnf bestand:

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

Stel module in op het pad van de provider die je hebt geïnstalleerd en pkcs11-module-path op het pad van de PKCS#11 module die je hebt geïnstalleerd.

Als je NetHSM als standaard provider wilt instellen, kun je default = pkcs11 toevoegen aan de provider_sect sectie.

Notitie

U kunt OpenSSL het pad van het OpenSSL-configuratiebestand geven met de OPENSSL_CONF omgevingsvariabele.

Waarschuwing

Als het hoofdconfiguratiebestand van OpenSSL zodanig wordt aangepast dat het alleen deze regels bevat, kan dit andere programma’s die OpenSSL gebruiken kapot maken. Daarom is het misschien beter om een apart instellingenbestand voor de provider te maken.

Vervolgens kun je sleutels gebruiken op de NetHSM door PKCS#11 URI’s te gebruiken, bijvoorbeeld:

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

Als je NetHSM als standaard provider instelt, kun je het -provider pkcs11 argument weglaten.

Notitie

Als je momenteel handmatig een sleuteltype in de URI instelt, kan de provider de sleutel niet vinden. Je kunt het gedeelte ;type=private of ;type=public van de URI weglaten om het te laten werken.