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#
Laadige arhiivi uusima versiooniga releases lehelt repositooriumist. Kasutage väljaandearhiivi, mille pealkirjas on teie operatsioonisüsteemi nimi.
Kaevake failid allalaaditud arhiivist välja teie valitud arhiveerimisprogrammiga.
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.
Laadige arhiivi uusima versiooniga releases lehelt repositooriumist. Kasutage versiooniarhiivi, mille pealkirjas on Source code.
Kaevake failid allalaaditud arhiivist välja teie valitud arhiveerimisprogrammiga.
Kataloogis, kus on ekstraheeritud lähtekood, täitke järgmine käsk, et raamatukogu kompileerida.
./build.sh
./build.sh
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