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#
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.
Izņemiet failus no lejupielādētā arhīva, izmantojot jūsu izvēlētu arhivēšanas programmu.
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>` __.
Lejupielādējiet arhīvu ar jaunāko versiju no repozitorija relīzes lapas. Izmantojiet izlaiduma arhīvu, kura nosaukumā ir Izejas kods.
Izņemiet failus no lejupielādētā arhīva, izmantojot jūsu izvēlētu arhivēšanas programmu.
Direktorijā, kurā atrodas izvilktais avota kods, izpildiet šādu komandu, lai kompilētu bibliotēku.
./build.sh
./build.sh
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