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#

  1. Arhiv z najnovejšo izdajo prenesite s strani releases repozitorija. Uporabite arhiv z izdajo, ki v naslovu vsebuje ime vašega operacijskega sistema.

  2. S programom za arhiviranje po lastni izbiri iz prenesenega arhiva izločite datoteke.

  3. 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.

  1. Arhiv z najnovejšo izdajo prenesite s strani releases repozitorija. Uporabite arhiv z izdajo, ki v naslovu vsebuje Izvorna koda.

  2. S programom za arhiviranje po lastni izbiri iz prenesenega arhiva izločite datoteke.

  3. V imeniku z izvorno kodo izvedite naslednji ukaz za sestavo knjižnice.

    ./build.sh
    
  4. 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