PKCS#11 с pkcs11-tool#
Това ръководство описва използването на PKCS#11 драйвера за NetHSM. Ръководството използва инструменти от OpenSC. Моля, направете справка с тяхната документация, за да научите как да ги използвате във вашата операционна система.
Important
Този драйвер все още е ранна версия на концепцията, която изпълнява само функциите, необходими за работа с TLS сървъри.
Инсталиране на приложението Nitrokey#
Инсталиране на предварително компилирана библиотека#
Изтеглете архив с най-новата версия от страницата releases на хранилището. Използвайте архива с изданието, което съдържа името на вашата операционна система в заглавието.
Изтеглете файловете от изтегления архив с програма за архивиране по ваш избор.
Копирайте извлечената библиотека в съответния път във вашата операционна система. Пътят зависи от вашата инсталация и конфигурация на OpenSC.
Компилиране от изходния код#
Important
Този драйвер може да се компилира само с официалния компилатор на Go. Не използвайте компилатора GNU Go (GCC-Go). Моля, вижте техния уебсайт ` <https://go.dev/doc/install>` __, за да научите как да го инсталирате.
Изтеглете архив с най-новата версия от страницата releases на хранилището. Използвайте архива с изданието, което съдържа в заглавието си Изходен код.
Изтеглете файловете от изтегления архив с програма за архивиране по ваш избор.
В директорията с извлечения изходен код изпълнете следната команда, за да компилирате библиотеката.
./build.sh
./build.sh
Копирайте извлечената библиотека в съответния път във вашата операционна система. Пътят зависи от вашата инсталация и конфигурация на OpenSC.
Статична конфигурация на DNS#
Файлът за конфигуриране p11nethsm.conf е необходим и се използва за конфигуриране на връзката между PKCS#11 драйвера и NetHSM.
Примерен конфигурационен файл изглежда по следния начин.
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"
Променете конфигурационния файл p11nethsm.conf в съответствие с вашата среда.
Конфигурационният файл може да включва няколко слота в масива slots. Слотовете представляват множество разгръщания на NetHSM. Полето label на слота трябва да съдържа уникално име. Ключовете url, user и password са задължителни. От съображения за сигурност се препоръчва паролата да се предава в променлива на средата. За тази цел в ключа password се предава env:NETHSM_PASS, където NETHSM_PASS е името на променливата на средата, съдържаща паролата. Ключът certSHA256 трябва да се зададе, ако TLS сертификатът не е подписан от удостоверяващ орган (CA), съдържащ се в хранилището за сертификати на операционната система.
Конфигурационният файл трябва да бъде записан или в следните пътища, или в директорията, в която се изпълнява приложението.
$HOME/.nitrokey
/etc/nitrokey/
Управление на ключовете#
Информация#
Покажете информация за версията на cryptoki и драйвера 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)
Списък на слотовете#
Информацията за наличните слотове. Изброените слотове зависят от конфигурацията на масива от слотове в конфигурационния файл p11nethsm.conf. За да научите повече за конфигурацията на слотовете, моля, вижте глава Конфигурация.
$ 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
Note
Ако конфигурацията ви поддържа повече от един слот, може да се наложи да добавите опцията –slot <arg> в командите на pkcs11-tool, за да използвате правилния слот.
Генериране на ключове#
Генерирайте двойка ключове и я съхранявайте в NetHSM.
Note
В момента драйверът PKCS#11 не поддържа тази функция. Ключовата двойка може да бъде генерирана с nitropy или с REST API заявка. За да научите повече за това как да генерирате ключ, моля, вижте глава Генериране на ключ.
Списък с ключове#
Покажете информация за ключовете и сертификатите в Key Store на 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
Прочетете ключовете#
Четете ключове и сертификати от Key Store на NetHSM. Не е възможно да се четат частни ключове от NetHSM.
Публичният ключ на двойка ключове може да се прочете по следния начин.
$ pkcs11-tool --module p11nethsm.so --read-object --type pubkey --label myFirstKey -o public.key
Сертификатът на двойка ключове може да се прочете по следния начин.
$ pkcs11-tool --module p11nethsm.so --read-object --type cert --label myFirstKey -o public.key
Върнатите сертификати или публични ключове са кодирани по ASN.1. Данните могат да бъдат декодирани с инструмента dumpasn1, тъй като съдържат данни във формат DER. Форматът DER може да се преобразува във формат PEM с помощта на OpenSSL.
Ключове за писане#
Записване на ключове и сертификати в Key Store на NetHSM.
Частният ключ на двойка ключове може да се запише по следния начин.
$ pkcs11-tool --module p11nethsm.so --write-object secret.key --type privkey --label myFirstKey
Публичният ключ на двойка ключове може да се запише по следния начин.
$ pkcs11-tool --module p11nethsm.so --write-object public.key --type pubkey --label myFirstKey
Сертификатът на двойка ключове може да се напише по следния начин.
$ pkcs11-tool --module p11nethsm.so --write-object cert.pub --type cert --label myFirstKey
Основни операции#
Криптиране#
NetHSM не може да криптира данни с асиметрични ключове, но предоставя публичния ключ, който може да се използва за криптиране. Моля, направете справка с глава Show Key Details (Покажи подробности за ключа) или извлечете ключа, както е описано в глава Read Keys (Четене на ключове) <pkcs11_with_pkcs11.html#read-keys>, за да научите повече за това как да извлечете публичния ключ. Примерът предполага, че публичният ключ се намира във файла public.pem.
Данните могат да бъдат криптирани с OpenSSL, както следва.
$ 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
Декриптиране#
NetHSM може да декриптира данни за частен ключ, съхраняван в Key Store на NetHSM. В този пример се използва криптираното съобщение от предишната глава Encrypt.
$ pkcs11-tool --module p11nethsm.so --decrypt \
--mechanism RSA-PKCS-OAEP \
--input-file encrypted.data \
--label myFirstKey \
--hash-algorithm SHA512
NetHSM rulez!
Знак#
NetHSM може да подписва данни за частен ключ, съхраняван в Key Store на NetHSM. За подписване с ключ RSA и ECDSA първо трябва да се изчисли цифров сбор.
За да се изчисли цифровата информация, първо се изискват данните. Съобщението се създава по следния начин.
$ echo 'NetHSM rulez!' | pkcs11-tool --module p11nethsm.so \
--sign \
--mechanism SHA512-RSA-PKCS-PSS \
--output-file sig.data \
--label myFirstKey
Създаденият подпис може да бъде проверен с OpenSSL по следния начин.
$ echo 'NetHSM rulez!' | openssl dgst -keyform PEM \
-verify public.pem \
-sha512 \
-sigopt rsa_padding_mode:pss \
-sigopt rsa_pss_saltlen:-1 \
-signature sig.data