PKCS#11 koos pkcs11-tööriistaga#

Selles juhendis kirjeldatakse PKCS#11 draiveri kasutamist NetHSMi jaoks. Juhendis kasutatakse vahendeid OpenSC. Nende dokumentatsioonist saate teada, kuidas neid oma operatsioonisüsteemis kasutada.

Tähtis

See draiver on veel varajane Proof of Concept’i rakendus, mis rakendab ainult TLS-serverite käitamiseks vajalikke funktsioone.

Paigaldamine#

Paigaldage eelkompileeritud raamatukogu#

  1. Laadige arhiivi uusima versiooniga releases lehelt repositooriumist. Kasutage väljaandearhiivi, mille pealkirjas on teie operatsioonisüsteemi nimi.

  2. Kaevake failid allalaaditud arhiivist välja teie valitud arhiveerimisprogrammiga.

  3. Kopeerige väljatõmmatud raamatukogu oma operatsioonisüsteemi vastavasse teekonda. See tee sõltub teie OpenSC paigaldusest ja konfiguratsioonist.

Kompileerimine lähtekoodist#

Tähtis

Seda draiverit saab kompileerida ainult ametliku Go kompilaatoriga. Ärge kasutage GNU Go kompilaatorit (GCC-Go). Palun vaadake nende veebilehte ` <https://go.dev/doc/install>` __, et teada saada, kuidas seda paigaldada.

  1. Laadige arhiivi uusima versiooniga releases lehelt repositooriumist. Kasutage versiooniarhiivi, mille pealkirjas on Source code.

  2. Kaevake failid allalaaditud arhiivist välja teie valitud arhiveerimisprogrammiga.

  3. Kataloogis, kus on ekstraheeritud lähtekood, täitke järgmine käsk, et raamatukogu kompileerida.

    ./build.sh
    
  4. Kopeerige väljatõmmatud raamatukogu oma operatsioonisüsteemi vastavasse teekonda. See tee sõltub teie OpenSC paigaldusest ja konfiguratsioonist.

Konfiguratsioon#

Konfiguratsioonifail p11nethsm.conf on vajalik ja seda kasutatakse PKCS#11 draiveri ja NetHSMi vahelise ühenduse konfigureerimiseks.

Näide konfiguratsioonifailist näeb välja järgmiselt.

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"

Muutke konfiguratsioonifaili p11nethsm.conf vastavalt oma keskkonnale.

Konfigureerimisfail võib sisaldada mitmeid teenindusajad, mis asuvad massiivis slots. Pilud esindavad mitut NetHSM-i kasutuselevõttu. Pesa label väli peab sisaldama unikaalset nime. Võtmed url, user ja password on kohustuslikud. Turvalisuse huvides on soovitatav edastada parool keskkonnamuutujas. Selleks edastatakse env:NETHSM_PASS võtmes password, kus NETHSM_PASS on parooli sisaldava keskkonnamuutuja nimi. Võti certSHA256 tuleb määrata, kui TLS-sertifikaat ei ole allkirjastatud operatsioonisüsteemi sertifikaadipoes oleva sertifitseerimisasutuse (CA) poolt.

Konfigureerimisfail tuleb salvestada kas järgmistesse kohtadesse või kataloogi, kus rakendus käivitatakse.

  • $HOME/.nitrokey

  • /etc/nitrokey/

Võtmehaldus#

Info#

Näitab teavet cryptoki versiooni ja PKCS#11 draiveri kohta.

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

Loetelu teenindusajad#

Teave vabade teenindusaegade kohta. Loetletud teenindusajad sõltuvad teenindusaegade massiivi konfiguratsioonist p11nethsm.conf konfiguratsioonifailis. Lisateavet teenindusaegade konfigureerimise kohta leiate peatükist Konfigureerimine.

$ 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

Märkus

Kui teie konfiguratsioon toetab rohkem kui ühte pesa, peate võib-olla lisama pkcs11-tööriista käskudesse valiku –slot <arg>, et kasutada õiget pesa.

Genereeri võti#

Looge võtmepaar ja salvestage see NetHSMis.

Märkus

PKCS#11 draiver ei toeta praegu seda funktsiooni. Võtmepaari saab genereerida nitropy või REST API taotlusega. Lisateavet võtme genereerimise kohta leiate peatükist Genereeri võti.

Loetelu võtmed#

Näitab teavet võtmete ja sertifikaatide kohta aadressil Key Store NetHSM-i võtmehoidlas.

$ 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

Loe võtmed#

Võtmete ja sertifikaatide lugemine NetHSM-i võtmehoidlast ** . NetHSMilt ei ole võimalik lugeda privaatvõtmeid.

Võtmepaari avalikku võtit saab lugeda järgmiselt.

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

Võtmepaari sertifikaati saab lugeda järgmiselt.

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

Tagastatud sertifikaadid või avalikud võtmed on kodeeritud ASN.1. Andmeid saab dekodeerida tööriistaga dumpasn1, kuna need sisaldavad andmeid DER-vormingus. DER-vormingut saab konverteerida PEM-vormingusse OpenSSLi abil.

Võtmete kirjutamine#

Võtmete ja sertifikaatide kirjutamine NetHSMi võtmehoidlasse ** .

Võtmepaari privaatvõtme võib kirjutada järgmiselt.

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

Võtmepaari avaliku võtme võib kirjutada järgmiselt.

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

Võtmepaari sertifikaadi võib kirjutada järgmiselt.

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

Peamised toimingud#

Krüpteeri#

NetHSM ei saa andmeid krüpteerida asümmeetriliste võtmetega, kuid see annab avaliku võtme, mida saab kasutada krüpteerimiseks. Vaadake peatükki Näita võtme üksikasju või võtme kättesaamine, nagu on kirjeldatud peatükis Luge võtmeid <pkcs11_with_pkcs11.html#read-keys>, et saada rohkem teavet avaliku võtme kättesaamise kohta. Näites eeldatakse, et avalik võti on failis public.pem.

Andmeid saab OpenSSL-i abil krüpteerida järgmiselt.

$ 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

Dekrüpteeri#

NetHSM saab dekrüpteerida andmeid NetHSMi võtmehoidlasse salvestatud privaatvõtme jaoks. Selles näites kasutatakse eelmises peatükis krüpteeritud sõnumit.

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

Allkiri#

NetHSM saab allkirjastada andmeid NetHSMi Key Store-s salvestatud privaatvõtme jaoks. RSA- ja ECDSA-võtmega allkirjastamise puhul tuleb kõigepealt arvutada digesti.

Digesti arvutamiseks on kõigepealt vaja andmeid. Sõnum luuakse järgmiselt.

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

Loodud allkirja saab kontrollida OpenSSL-i abil järgmiselt.

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