PKCS#11 ar rīku pkcs11-tool#

Šajā rokasgrāmatā ir aprakstīta PKCS#11 draivera izmantošana NetHSM. Rokasgrāmatā izmantoti rīki no OpenSC. Lai uzzinātu, kā tos izmantot savā operētājsistēmā, skatiet to dokumentāciju.

Svarīgi

Šis draiveris joprojām ir agrīna koncepcijas izmēģinājuma implementācija, kas īsteno tikai tās funkcijas, kuras ir nepieciešamas TLS serveru darbībai.

Uzstādīšana#

Uzstādīt iepriekš kompilētu bibliotēku#

  1. Lejupielādējiet arhīvu ar jaunāko versiju no repozitorija relīzes lapas. Izmantojiet izlaiduma arhīvu, kura nosaukumā ir jūsu operētājsistēmas nosaukums.

  2. Izņemiet failus no lejupielādētā arhīva, izmantojot jūsu izvēlētu arhivēšanas programmu.

  3. Kopējiet iegūto bibliotēku uz attiecīgo ceļu savā operētājsistēmā. Ceļš ir atkarīgs no OpenSC instalācijas un konfigurācijas.

Salikt no pirmkoda#

Svarīgi

Šo draiveri var kompilēt tikai ar oficiālo Go kompilatoru. Nelietojiet GNU Go kompilatoru (GCC-Go). Lai uzzinātu, kā to instalēt, lūdzu, skatiet tīmekļa vietni ` <https://go.dev/doc/install>` __.

  1. Lejupielādējiet arhīvu ar jaunāko versiju no repozitorija relīzes lapas. Izmantojiet izlaiduma arhīvu, kura nosaukumā ir Izejas kods.

  2. Izņemiet failus no lejupielādētā arhīva, izmantojot jūsu izvēlētu arhivēšanas programmu.

  3. Direktorijā, kurā atrodas izvilktais avota kods, izpildiet šādu komandu, lai kompilētu bibliotēku.

    ./build.sh
    
  4. Kopējiet iegūto bibliotēku uz attiecīgo ceļu savā operētājsistēmā. Ceļš ir atkarīgs no OpenSC instalācijas un konfigurācijas.

Konfigurācija#

Konfigurācijas fails p11nethsm.conf ir nepieciešams un tiek izmantots, lai konfigurētu savienojumu starp PKCS#11 draiveri un NetHSM.

Konfigurācijas faila piemērs izskatās šādi.

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"

Mainiet konfigurācijas failu p11nethsm.conf atbilstoši savai videi.

Konfigurācijas failā var iekļaut vairākus laika nišu masīva slots iekšpusē. Šie slots ataino vairākus NetHSM izvietojumus. Slota label laukā jānorāda unikāls nosaukums. Atslēgas url, user un password ir obligātas. Drošības apsvērumu dēļ paroli ieteicams ievadīt vides mainīgajā. Šim nolūkam env:NETHSM_PASS tiek nodots password atslēgā, kur NETHSM_PASS ir vides mainīgā, kas satur paroli, nosaukums. Ja TLS sertifikātu nav parakstījusi operētājsistēmas sertifikātu krātuvē esošā sertifikātu iestāde (CA), ir jāiestata atslēga certSHA256.

Konfigurācijas fails ir jāieraksta vai nu šādos ceļos, vai direktorijā, kurā tiek izpildīta programma.

  • $HOME/.nitrokey

  • /etc/nitrokey/

Atslēgas pārvaldība#

Informācija#

Rāda informāciju par cryptoki versiju un PKCS#11 draiveri.

$ 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)

Saraksta spēļu automāti#

Informācija par pieejamajiem laika nišām. Uzskaitītie laika nišas ir atkarīgi no laika nišu masīva konfigurācijas p11nethsm.conf konfigurācijas failā. Lai uzzinātu vairāk par slotu konfigurāciju, skatiet nodaļu Konfigurācija.

$ 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

Piezīme

Ja jūsu konfigurācija atbalsta vairāk nekā vienu slotu, jums, iespējams, būs jāpievieno –slot <arg> opcija pkcs11-tool komandās, lai izmantotu pareizo slotu.

Ģenerēt atslēgu#

Izveidojiet atslēgu pāri un saglabājiet to NetHSM.

Piezīme

PKCS#11 draiveris pašlaik neatbalsta šo funkciju. Atslēgu pāri var ģenerēt, izmantojot nitropy vai REST API pieprasījumu. Lai uzzinātu vairāk par to, kā ģenerēt atslēgu, lūdzu, skatiet nodaļu Ģenerēt atslēgu.

Saraksta atslēgas#

Parādīt informāciju par atslēgām un sertifikātiem atslēgu krātuvē 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

Lasīt atslēgas#

Atslēgu un sertifikātu nolasīšana no atslēgu krātuves NetHSM. No NetHSM nav iespējams nolasīt privātās atslēgas.

Atslēgu pāra publisko atslēgu var nolasīt šādi.

$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key

Atslēgu pāra sertifikātu var nolasīt šādi.

$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key

Atgrieztie sertifikāti vai publiskās atslēgas ir ASN.1 kodētas. Datus var atšifrēt ar rīku dumpasn1, jo tie satur datus DER formātā. DER formātu var konvertēt PEM formātā, izmantojot OpenSSL.

Rakstīt atslēgas#

Ierakstiet atslēgas un sertifikātus atslēgu krātuvē NetHSM.

Atslēgu pāra privāto atslēgu var rakstīt šādi.

$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey

Atslēgu pāra publisko atslēgu var rakstīt šādi.

$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey

Atslēgu pāra sertifikātu var rakstīt šādi.

$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey

Galvenās darbības#

Šifrēt#

NetHSM nevar šifrēt datus ar asimetriskām atslēgām, taču tas nodrošina publisko atslēgu, ko var izmantot šifrēšanai. Lai uzzinātu vairāk par to, kā iegūt publisko atslēgu, lūdzu, skatiet nodaļu Show Key Details vai iegūstiet atslēgu, kā aprakstīts nodaļā Read Keys <pkcs11_with_pkcs11.html#read-keys>. Šajā piemērā ir pieņemts, ka publiskā atslēga atrodas failā public.pem.

Datus var šifrēt ar OpenSSL šādi.

$ 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

Atšifrējiet#

NetHSM var atšifrēt datus par privāto atslēgu, kas glabājas atslēgu krātuvē NetHSM. Šajā piemērā izmantots šifrēts ziņojums no iepriekšējās nodaļas Šifrēt.

$ pkcs11-tool --module p11nethsm.so --decrypt \
   --mechanism RSA-PKCS-OAEP \
   --input-file encrypted.data \
   --label myFirstKey \
   --hash-algorithm SHA512
NetHSM rulez!

Pierakstīties#

NetHSM var parakstīt datus par privāto atslēgu, kas glabājas NetHSM Key Store. Parakstīšanai ar RSA un ECDSA atslēgu vispirms jāaprēķina digest.

Lai aprēķinātu digestu, vispirms ir nepieciešami dati. Ziņu izveido šādi.

$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
   --sign \
   --mechanism SHA512-RSA-PKCS-PSS \
   --output-file sig.data \
   --label myFirstKey

Izveidoto parakstu var pārbaudīt, izmantojot OpenSSL, šādi.

$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
   -verify public.pem \
   -sha512 \
   -sigopt rsa_padding_mode:pss \
   -sigopt rsa_pss_saltlen:-1 \
   -signature sig.data