PKCS#11 cu pkcs11-tool#
Acest ghid descrie utilizarea driverului PKCS#11 pentru NetHSM. Ghidul utilizează instrumente din OpenSC. Vă rugăm să consultați documentația acestora pentru a afla cum să le utilizați pe sistemul dumneavoastră de operare.
Important
Acest driver este încă o implementare timpurie de tip „Proof of Concept” care implementează doar funcțiile necesare pentru operarea serverelor TLS.
Instalare#
Instalați biblioteca precompilată#
Descărcați o arhivă cu cea mai recentă versiune de pe pagina releases a depozitului. Utilizați arhiva de versiuni care conține în titlu numele sistemului dumneavoastră de operare.
Extrageți fișierele din arhiva descărcată cu un program de arhivare la alegere.
Copiați biblioteca extrasă în calea respectivă din sistemul dumneavoastră de operare. Calea depinde de instalarea și configurarea OpenSC.
Compilați din codul sursă#
Important
Acest driver poate fi compilat numai cu compilatorul oficial Go. Nu utilizați compilatorul GNU Go (GCC-Go). Vă rugăm să consultați site-ul lor ` <https://go.dev/doc/install>` __ pentru a afla cum să îl instalați.
Descărcați o arhivă cu cea mai recentă versiune de pe pagina releases a depozitului. Utilizați arhiva de versiuni care conține Source code în titlu.
Extrageți fișierele din arhiva descărcată cu un program de arhivare la alegere.
În directorul cu codul sursă extras, executați următoarea comandă pentru a compila biblioteca.
./build.sh
./build.sh
Copiați biblioteca extrasă în calea respectivă din sistemul dumneavoastră de operare. Calea depinde de instalarea și configurarea OpenSC.
Configurație#
Fișierul de configurare p11nethsm.conf este necesar și este utilizat pentru a configura conexiunea dintre driverul PKCS#11 și NetHSM.
Un exemplu de fișier de configurare arată după cum urmează.
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"
Modificați fișierul de configurare p11nethsm.conf în funcție de mediul dumneavoastră.
Fișierul de configurare poate include mai multe sloturi, în interiorul matricei slots. Sloturile reprezintă mai multe implementări NetHSM. Câmpul label al unui slot trebuie să conțină un nume unic. Cheile url, user și password sunt obligatorii. Din motive de securitate, se recomandă să se treacă parola într-o variabilă de mediu. În acest scop, în cheia password se trece env:NETHSM_PASS, unde NETHSM_PASS este numele variabilei de mediu care conține parola. Cheia certSHA256 trebuie să fie setată dacă certificatul TLS nu este semnat de o autoritate de certificare (CA) conținută în stocul de certificate al sistemului de operare.
Fișierul de configurare trebuie salvat fie în următoarele căi, fie în directorul în care este executată aplicația.
$HOME/.nitrokey
/etc/nitrokey/
Managementul cheilor#
Informații#
Afișează informații despre versiunea cryptoki și despre driverul 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)
Lista sloturilor#
Informații despre sloturile disponibile. Sloturile listate depind de configurația matricei de sloturi din fișierul de configurare p11nethsm.conf. Pentru a afla mai multe despre configurarea sloturilor, consultați capitolul Configurare.
$ 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
Notă
Dacă configurația dvs. acceptă mai multe sloturi, poate că va trebui să adăugați opțiunea –slot <arg> în comenzile pkcs11-tool pentru a-l utiliza pe cel corect.
Generarea cheii#
Generați o pereche de chei și stocați-o pe NetHSM.
Notă
În prezent, driverul PKCS#11 nu acceptă această funcție. O pereche de chei poate fi generată cu nitropy sau cu o solicitare REST API. Pentru a afla mai multe despre modul de generare a unei chei, consultați capitolul Generate Key.
Chei de listă#
Afișează informații despre cheile și certificatele din Key Store pe un 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
Chei de citire#
Citiți cheile și certificatele din Key Store pe un NetHSM. Nu este posibil să citiți chei private de pe NetHSM.
Cheia publică a unei perechi de chei poate fi citită după cum urmează.
$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key
Certificatul unei perechi de chei poate fi citit după cum urmează.
$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key
Certificatele sau cheile publice returnate sunt codificate ASN.1. Datele pot fi decodate cu instrumentul dumpasn1, deoarece conțin date în format DER. Formatul DER poate fi convertit în format PEM cu OpenSSL.
Chei de scriere#
Scrieți chei și certificate în Key Store pe un NetHSM.
Cheia privată a unei perechi de chei poate fi scrisă după cum urmează.
$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey
Cheia publică a unei perechi de chei poate fi scrisă după cum urmează.
$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey
Certificatul unei perechi de chei poate fi scris după cum urmează.
$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey
Operațiuni cheie#
Criptare#
NetHSM nu poate cripta date cu chei asimetrice, dar furnizează cheia publică care poate fi utilizată pentru criptare. Vă rugăm să consultați capitolul Show Key Details <operation.html#show-key-details> __, sau să recuperați cheia așa cum este descris în capitolul Read Keys <pkcs11_with_pkcs11.html#read-keys>, pentru a afla mai multe despre cum să recuperați cheia publică. Exemplul presupune că cheia publică se află în fișierul public.pem.
Datele pot fi criptate cu OpenSSL după cum urmează.
$ 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
Decriptare#
NetHSM poate decripta date pentru o cheie privată stocată în Key Store de pe NetHSM. Acest exemplu utilizează mesajul criptat din capitolul anterior Encrypt.
$ pkcs11-tool --module p11nethsm.so --decrypt \
--mechanism RSA-PKCS-OAEP \
--input-file encrypted.data \
--label myFirstKey \
--hash-algorithm SHA512
NetHSM rulez!
Semnează#
NetHSM poate semna date pentru o cheie privată stocată în Key Store de pe NetHSM. Pentru semnăturile cu o cheie RSA și ECDSA, trebuie să se calculeze mai întâi un compendiu.
Pentru a calcula un compendiu sunt necesare mai întâi datele. Se creează un mesaj după cum urmează.
$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
--sign \
--mechanism SHA512-RSA-PKCS-PSS \
--output-file sig.data \
--label myFirstKey
Semnătura creată poate fi verificată cu OpenSSL după cum urmează.
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
-verify public.pem \
-sha512 \
-sigopt rsa_padding_mode:pss \
-sigopt rsa_pss_saltlen:-1 \
-signature sig.data