PKCS#11 su pkcs11-tool#
Šiame vadove aprašomas PKCS#11 tvarkyklės naudojimas NetHSM. Vadove naudojami įrankiai iš OpenSC. Norėdami sužinoti, kaip jas naudoti savo operacinėje sistemoje, žr. jų dokumentaciją.
Svarbu
Ši tvarkyklė vis dar yra ankstyvoji koncepcijos įgyvendinimo versija, kurioje įdiegtos tik tos funkcijos, kurios būtinos TLS serveriams valdyti.
Įrengimas#
Įdiegti iš anksto parengtą biblioteką#
Atsisiųskite archyvą su naujausia versija iš releases puslapio saugyklos. Naudokite išleidimo archyvą, kurio pavadinime yra jūsų operacinės sistemos pavadinimas.
Atsisiųsto archyvo failus išskleiskite naudodami pasirinktą archyvavimo programą.
Nukopijuokite išskleistą biblioteką į atitinkamą jūsų operacinės sistemos kelią. Kelias priklauso nuo jūsų „OpenSC“ įdiegimo ir konfigūracijos.
Kompiliuoti iš pradinio kodo#
Svarbu
Šią tvarkyklę galima kompiliuoti tik naudojant oficialų Go kompiliatorių. Nenaudokite GNU Go kompiliatoriaus (GCC-Go). Norėdami sužinoti, kaip jį įdiegti, žr. jų svetainę ` <https://go.dev/doc/install>` __.
Atsisiųskite archyvą su naujausia versija iš releases puslapio saugyklos. Naudokite išleidimo archyvą, kurio pavadinime yra Išteklių kodas.
Atsisiųsto archyvo failus išskleiskite naudodami pasirinktą archyvavimo programą.
Kataloge, kuriame yra ištrauktas šaltinio kodas, vykdykite šią komandą bibliotekai kompiliuoti.
./build.sh
./build.sh
Nukopijuokite išskleistą biblioteką į atitinkamą jūsų operacinės sistemos kelią. Kelias priklauso nuo jūsų „OpenSC“ įdiegimo ir konfigūracijos.
Konfigūracija#
Konfigūracijos failas p11nethsm.conf yra reikalingas ir naudojamas PKCS#11 tvarkyklės ir NetHSM ryšiui konfigūruoti.
Konfigūracijos failo pavyzdys atrodo taip.
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"
Pakeiskite konfigūracijos failą p11nethsm.conf pagal savo aplinką.
Konfigūracijos faile gali būti keli lizdai, esantys masyve slots. Šie lizdai simbolizuoja kelis NetHSM diegimus. Lizdo ženklinimo lauke turi būti unikalus pavadinimas. Raktai url, user ir password yra privalomi. Saugumo sumetimais slaptažodį rekomenduojama perduoti aplinkos kintamuoju. Šiuo atveju env:NETHSM_PASS perduodamas rakte password, kur NETHSM_PASS yra aplinkos kintamojo, kuriame yra slaptažodis, pavadinimas. Raktą certSHA256 reikia nustatyti, jei TLS sertifikato nepasirašo operacinės sistemos sertifikatų saugykloje esanti sertifikavimo įstaiga (CA).
Konfigūracijos failą reikia išsaugoti toliau nurodytuose keliuose arba kataloge, kuriame vykdoma programa.
$HOME/.nitrokey
/etc/nitrokey/
Raktų valdymas#
Informacija#
Rodyti informaciją apie cryptoki versiją ir PKCS#11 tvarkyklę.
$ 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)
Sąrašo lizdai#
Informacija apie turimus laiko tarpsnius. Išvardyti lizdai priklauso nuo lizdų masyvo konfigūracijos konfigūracijos faile p11nethsm.conf. Daugiau informacijos apie lizdų konfigūraciją rasite skyriuje Konfigūracija.
$ 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
Pastaba
Jei jūsų konfigūracija palaiko daugiau nei vieną lizdą, jums gali tekti į pkcs11-tool komandas įtraukti –slot <arg> parinktį, kad galėtumėte naudoti tinkamą lizdą.
Generuoti raktą#
Sukurkite raktų porą ir išsaugokite ją „NetHSM“.
Pastaba
Šiuo metu PKCS#11 tvarkyklė šios funkcijos nepalaiko. Raktų porą galima sukurti naudojant nitropy arba REST API užklausą. Daugiau informacijos apie tai, kaip generuoti raktą, rasite skyriuje Generuoti raktą.
Sąrašo raktai#
Rodyti informaciją apie raktus ir sertifikatus, esančius raktų saugykloje, esančioje 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
Skaityti raktus#
Skaityti raktus ir sertifikatus iš raktų saugyklos, esančios NetHSM. Privačių raktų iš NetHSM nuskaityti neįmanoma.
Viešąjį raktų poros raktą galima perskaityti taip.
$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key
Raktų poros sertifikatą galima perskaityti taip.
$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key
Grąžinti sertifikatai arba viešieji raktai yra ASN.1 koduojami. Duomenis galima iššifruoti naudojant įrankį dumpasn1, nes juose yra duomenų DER formatu. DER formatą galima konvertuoti į PEM formatą naudojant OpenSSL.
Rašyti raktus#
Įrašykite raktus ir sertifikatus į raktų saugyklą, esančią NetHSM.
Raktų poros privatųjį raktą galima užrašyti taip.
$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey
Viešąjį raktų poros raktą galima užrašyti taip.
$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey
Raktų poros sertifikatą galima užrašyti taip.
$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey
Pagrindinės operacijos#
Užšifruoti#
NetHSM negali šifruoti duomenų asimetriniais raktais, tačiau pateikia viešąjį raktą, kurį galima naudoti šifravimui. Daugiau apie tai, kaip gauti viešąjį raktą, skaitykite skyriuje Show Key Details arba gaukite raktą, kaip aprašyta skyriuje Read Keys <pkcs11_with_pkcs11.html#read-keys>. Pavyzdyje daroma prielaida, kad viešasis raktas yra public.pem faile.
Duomenis galima užšifruoti naudojant „OpenSSL“ taip.
$ 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
Iššifruoti#
NetHSM gali iššifruoti duomenis privačiu raktu, saugomu raktų saugykloje, esančioje NetHSM. Šiame pavyzdyje naudojamas užšifruotas pranešimas iš ankstesnio skyriaus Užšifruoti.
$ pkcs11-tool --module p11nethsm.so --decrypt \
--mechanism RSA-PKCS-OAEP \
--input-file encrypted.data \
--label myFirstKey \
--hash-algorithm SHA512
NetHSM rulez!
Ženklas#
NetHSM gali pasirašyti duomenis privačiu raktu, saugomu NetHSM Key Store (raktų saugykloje). Pasirašant su RSA ir ECDSA raktu, pirmiausia turi būti apskaičiuota suvestinė.
Norint apskaičiuoti saugiklį, pirmiausia reikia duomenų. Pranešimas sukuriamas taip.
$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
--sign \
--mechanism SHA512-RSA-PKCS-PSS \
--output-file sig.data \
--label myFirstKey
Sukurtą parašą galima patikrinti naudojant OpenSSL taip.
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
-verify public.pem \
-sha512 \
-sigopt rsa_padding_mode:pss \
-sigopt rsa_pss_saltlen:-1 \
-signature sig.data