PKCS#11 z orodjem pkcs11-tool#
Ta priročnik opisuje uporabo gonilnika PKCS#11 za NetHSM. V vodniku so uporabljena orodja iz OpenSC. Če želite izvedeti, kako jih uporabljati v svojem operacijskem sistemu, glejte njihovo dokumentacijo.
Pomembno
Ta gonilnik je še vedno zgodnja izvedba, ki je poskusna in izvaja le funkcije, ki so potrebne za delovanje strežnikov TLS.
Namestitev#
Namestitev predkompilirane knjižnice#
Arhiv z najnovejšo izdajo prenesite s strani releases repozitorija. Uporabite arhiv z izdajo, ki v naslovu vsebuje ime vašega operacijskega sistema.
S programom za arhiviranje po lastni izbiri iz prenesenega arhiva izločite datoteke.
Kopirajte pridobljeno knjižnico na ustrezno pot v operacijskem sistemu. Pot je odvisna od vaše namestitve in konfiguracije OpenSC.
Sestavljanje iz izvorne kode#
Pomembno
Ta gonilnik je mogoče sestaviti samo z uradnim prevajalnikom Go. Ne uporabljajte prevajalnika GNU Go (GCC-Go). Na njihovem spletnem mestu ` <https://go.dev/doc/install>` __ si oglejte, kako ga namestiti.
Arhiv z najnovejšo izdajo prenesite s strani releases repozitorija. Uporabite arhiv z izdajo, ki v naslovu vsebuje Izvorna koda.
S programom za arhiviranje po lastni izbiri iz prenesenega arhiva izločite datoteke.
V imeniku z izvorno kodo izvedite naslednji ukaz za sestavo knjižnice.
./build.sh
./build.sh
Kopirajte pridobljeno knjižnico na ustrezno pot v operacijskem sistemu. Pot je odvisna od vaše namestitve in konfiguracije OpenSC.
Konfiguracija#
Konfiguracijska datoteka p11nethsm.conf je potrebna in se uporablja za konfiguracijo povezave med gonilnikom PKCS#11 in NetHSM.
Primer konfiguracijske datoteke je videti takole.
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"
Spremenite konfiguracijsko datoteko p11nethsm.conf glede na svoje okolje.
Konfiguracijska datoteka lahko vsebuje več rež v polju slots. Reže predstavljajo več namestitev NetHSM. Polje label reže mora vsebovati edinstveno ime. Ključi url, user in password so obvezni. Iz varnostnih razlogov je priporočljivo, da geslo posredujete v spremenljivki okolja. V ta namen se v ključu password posreduje env:NETHSM_PASS, pri čemer je NETHSM_PASS ime okoljske spremenljivke, ki vsebuje geslo. Ključ certSHA256 je treba nastaviti, če potrdila TLS ni podpisal organ za potrjevanje (CA), ki je v shrambi potrdil operacijskega sistema.
Konfiguracijsko datoteko je treba shraniti na naslednjih poteh ali v imeniku, v katerem se izvaja aplikacija.
$HOME/.nitrokey
/etc/nitrokey/
Upravljanje ključev#
Info#
Prikaže informacije o različici programa cryptoki in gonilniku 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)
Seznam igralnih mest#
Informacije o razpoložljivih režah. Naštete reže so odvisne od konfiguracije polja rež v konfiguracijski datoteki p11nethsm.conf. Če želite izvedeti več o konfiguraciji rež, si oglejte poglavje Konfiguracija.
$ 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
Opomba
Če vaša konfiguracija podpira več kot eno režo, boste morda morali v ukaze pkcs11-tool dodati možnost –slot <arg>, da boste uporabili pravo režo.
Ustvarjanje ključa#
Ustvarite par ključev in ga shranite v NetHSM.
Opomba
Gonilnik PKCS#11 trenutno ne podpira te funkcije. Par ključev je mogoče ustvariti s nitropy ali z zahtevo REST API. Če želite izvedeti več o tem, kako ustvariti ključ, si oglejte poglavje Ustvari ključ.
Seznam ključev#
Prikažite informacije o ključih in potrdilih v shrambi ključev ** v napravi 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
Preberi ključe#
Branje ključev in potrdil iz shrambe ključev ** v napravi NetHSM. Zasebnih ključev ni mogoče prebrati iz naprave NetHSM.
Javni ključ para ključev lahko preberete na naslednji način.
$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key
Potrdilo para ključev lahko preberete na naslednji način.
$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key
Vrnjena potrdila ali javni ključi so kodirani v ASN.1. Podatke je mogoče dekodirati z orodjem dumpasn1, saj vsebujejo podatke v obliki DER. Format DER je mogoče pretvoriti v format PEM z OpenSSL.
Pisanje ključev#
Zapisovanje ključev in potrdil v shrambo ključev ** v napravi NetHSM.
Zasebni ključ para ključev lahko zapišemo na naslednji način.
$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey
Javni ključ para ključev lahko zapišemo na naslednji način.
$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey
Certifikat para ključev lahko zapišemo na naslednji način.
$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey
Ključne operacije#
Šifriranje#
NetHSM ne more šifrirati podatkov z asimetričnimi ključi, vendar zagotavlja javni ključ, ki se lahko uporabi za šifriranje. Za več informacij o tem, kako pridobiti javni ključ, glejte poglavje Prikaži podrobnosti o ključu ali pridobite ključ, kot je opisano v poglavju Prebiranje ključev <pkcs11_s_pkcs11.html#read-keys>. Primer predpostavlja, da je javni ključ v datoteki public.pem.
Podatke lahko šifrirate z OpenSSL na naslednji način.
$ 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
Dešifriranje#
NetHSM lahko dešifrira podatke za zasebni ključ, shranjen v Key Store v NetHSM. V tem primeru je uporabljeno šifrirano sporočilo iz prejšnjega poglavja Šifriranje.
$ pkcs11-tool --module p11nethsm.so --decrypt \
--mechanism RSA-PKCS-OAEP \
--input-file encrypted.data \
--label myFirstKey \
--hash-algorithm SHA512
NetHSM rulez!
Znak#
NetHSM lahko podpiše podatke za zasebni ključ, ki je shranjen v shrambi Key Store v NetHSM. Za podpisovanje s ključem RSA in ECDSA je treba najprej izračunati prebavo.
Za izračun digesta so najprej potrebni podatki. Sporočilo se ustvari na naslednji način.
$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
--sign \
--mechanism SHA512-RSA-PKCS-PSS \
--output-file sig.data \
--label myFirstKey
Ustvarjeni podpis lahko preverite s programom OpenSSL na naslednji način.
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
-verify public.pem \
-sha512 \
-sigopt rsa_padding_mode:pss \
-sigopt rsa_pss_saltlen:-1 \
-signature sig.data