Инструмент командной строки Nitropy#

В этом руководстве показано, как получить доступ к NetHMS через nitropy инструмент командной строки, который необходимо загрузить и установить.

Примечание

Если вы используете демонстрационный экземпляр NetHSM с самоподписанным сертификатом, например, с помощью образа Docker, вам придется использовать опцию --no-verify-tls для nitropy, чтобы пропустить проверку сертификата.

Примечание

Сначала установите значение $NETHSM_HOST в IP-адрес или URL вашего NetHSM. Наш демо-сервер можно найти по адресу https://nethsmdemo.nitrokey.com/.

Информация об устройстве & Статус#

$ nitropy nethsm --host $NETHSM_HOST info

Host:    localhost:8443
Vendor:  Nitrokey GmbH
Product: NetHSM
$ nitropy nethsm --host $NETHSM_HOST state

NetHSM localhost:8443 is Unprovisioned

Обеспечение#

Для нового NetHSM необходимо сначала установить парольные фразы и текущее время. Парольная фраза Admin - это парольная фраза Administrator, который является суперпользователем NetHSM. Пароль Unlock Passphrase используется для шифрования хранилища конфиденциальных данных NetHSM.

Примечание

Демо-экземпляр NetHSM по адресу nethsmdemo.nitrokey.com уже предоставлен.

$ nitropy nethsm --host $NETHSM_HOST provision

NetHSM localhost:8443 provisioned

NetHSM может быть использован в режиме Attended Boot и Unattended Boot.

  • В режиме Attended Boot при каждом запуске необходимо вводить Unlock Passphrase, которая используется для шифрования хранилища данных. В целях безопасности рекомендуется использовать этот режим.

  • В режиме Unattended Boot не требуется парольная фраза для разблокировки, поэтому NetHSM может запускаться без присмотра, а хранилище данных хранится в незашифрованном виде. Используйте этот режим, если ваши требования к доступности не могут быть выполнены в режиме Attended Boot.

Получение текущего режима:

$ nitropy nethsm --host $NETHSM_HOST get-config --unattended-boot

 Configuration for NetHSM localhost:8443:
 Unattended boot: off

Включите режим Unattended Boot:

$ nitropy nethsm --host $NETHSM_HOST set-unattended-boot on

 Updated the unattended boot configuration for NetHSM localhost:8443

Управление пользователями#

Роли#

Разделение обязанностей может быть реализовано с помощью доступных Ролей. Каждая учетная запись пользователя, настроенная на NetHSM, имеет одну из следующих ролей. Ниже приведено высокоуровневое описание операций, разрешенных отдельными Ролями, а подробности, относящиеся к конкретной конечной точке, см. в документации REST API.

  • R-Administrator: Учетная запись пользователя с этой ролью имеет доступ ко всем операциям, предоставляемым REST API, за исключением операций использования ключей, т.е. подписания и расшифровки сообщений.

  • R-Operator: Учетная запись пользователя с этой ролью имеет доступ ко всем операциям использования ключей, подмножеству операций управления ключами только для чтения и операциям управления пользователями, позволяющим вносить изменения только для своей учетной записи.

  • R-Metrics: Учетная запись пользователя с этой ролью имеет доступ только к операциям с метриками только для чтения.

  • R-Backup: Учетная запись пользователя с этой ролью имеет доступ только к операциям, необходимым для инициирования резервного копирования системы.

Примечание: В будущих релизах могут быть введены дополнительные роли.

Создание и удаление пользователей

Теперь создайте нового пользователя с ролью оператора, который может использоваться для подписи и расшифровки данных. Обратите внимание, что NetHSM назначает случайный идентификатор пользователя, если мы его не указываем.

$ nitropy nethsm --host $NETHSM_HOST  add-user --real-name "Jane User" --role Operator

User Operator added to NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST delete-user "Jane User"

Управление ключами#

Генерировать ключи#

В этом руководстве мы хотим использовать ключ RSA для расшифровки данных с помощью PKCS #1 и для подписи данных с помощью PSS с использованием SHA256. Поэтому давайте сгенерируем новый ключ на NetHSM. Обязательно используйте алгоритм RSA и выберите ключевые механизмы RSA_Signature_PSS_SHA256 и RSA_Decryption_PKCS1. Если вы не укажете идентификатор ключа, NetHSM сгенерирует случайный идентификатор для нового ключа.

$ nitropy nethsm --host $NETHSM_HOST  generate-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --length 2048 --key-id myFirstKey

Key myFirstKey generated on NetHSM localhost:8443

Импортные ключи#

Вместо того чтобы генерировать ключ на NetHSM, вы также можете импортировать существующие закрытые ключи в NetHSM:

$ nitropy nethsm --host $NETHSM_HOST  add-key --type RSA --mechanism RSA_Signature_PSS_SHA256 --mechanism RSA_Decryption_PKCS1 --key-id mySecondKey --public-exponent AQAB --prime-p "AOnWFZ+JrI/xOXJU04uYCZOiPVUWd6CSbVseEYrYQYxc7dVroePshz29tc+VEOUP5T0O8lXMEkjFAwjW6C9QTAsPyl6jwyOQluMRIkdN4/7BAg3HAMuGd7VmkGyYrnZWW54sLWp1JD6XJG33kF+9OSar9ETPoVyBgK5punfiUFEL" \
    --prime-q "ANT1kWDdP9hZoFKT49dwdM/S+3ZDnxQa7kZk9p+JKU5RaU9e8pS2GOJljHwkES1FH6CUGeIaUi81tRKe2XZhe/163sEyMcxkaaRbBbTc1v6ZDKILFKKt4eX7LAQfhL/iFlgi6pcyUM8QDrm1QeFgGz11ChM0JuQw1WwkX06lg8iv"

Key mySecondKey added to NetHSM localhost:8443

Ключи списка#

Чтобы убедиться, что ключ был создан и имеет правильные настройки алгоритма и механизма, мы можем запросить все ключи в NetHSM:

$ nitropy nethsm --host $NETHSM_HOST list-keys
Keys on NetHSM localhost:8443:

Key ID          Algorithm       Mechanisms                                      Operations
----------      ---------       ----------------------------------------------  ----------
myFirstKey      RSA             RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256  0
mySecondKey     RSA             RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256  0

Показать ключевые детали#

Мы также можем запросить открытый ключ сгенерированной пары ключей:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey

Чтобы иметь возможность использовать ключ в OpenSSL, мы экспортируем его в PEM-файл и храним его под именем public.pem:

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key > public.pem

Мы можем проверить ключ с помощью openssl и использовать его для шифрования или проверки подписи (как описано в следующем разделе):

$ openssl rsa -in public.pem -pubin -text

RSA Public-Key: (2048 bit)
Modulus:
          00:c3:56:f5:09:cc:a9:3e:ca:16:2e:fb:d2:8b:9d:
          a9:33:5a:87:8f:3f:7a:bb:8a:3d:62:9b:5d:56:84:
          95:97:bb:97:f0:77:e2:c8:59:f2:b5:c6:b7:f5:b3:
          76:69:a3:e8:f6:b7:35:f4:3c:52:6d:3c:a0:b6:a1:
          e4:1a:32:05:1d:51:68:21:7d:fc:53:69:ec:bc:0b:
          a0:db:63:b2:0e:47:00:03:4d:98:1f:ab:c0:7b:2e:
          3c:8f:b6:36:ff:f0:db:80:26:f0:a6:af:30:2f:7b:
          16:fd:5c:db:0f:2c:54:8a:26:2b:db:3d:78:49:4b:
          7b:d1:60:ea:a7:f0:b4:5e:fc:33:ff:57:f8:83:fd:
          12:64:8f:29:d1:94:96:9a:15:18:5d:04:ca:1c:29:
          44:ad:42:31:c5:80:38:4c:eb:3b:b8:7e:17:27:5c:
          69:a8:88:44:ea:d1:82:64:fe:51:31:47:97:a7:a9:
          87:c3:13:c9:00:7a:b9:fb:6f:cc:66:4c:07:d7:68:
          fa:78:68:9a:e7:87:1e:94:c6:27:92:5f:f2:7d:11:
          44:11:b5:39:35:59:2c:cd:f9:4f:59:e3:56:93:1f:
          94:20:fd:6b:23:0d:15:e6:4e:bb:84:a8:a5:0d:9f:
          1c:90:ab:a8:10:04:50:12:c1:80:02:94:85:78:df:
          d6:b3
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAw1b1CcypPsoWLvvSi52p
M1qHjz96u4o9YptdVoSVl7uX8HfiyFnytca39bN2aaPo9rc19DxSbTygtqHkGjIF
HVFoIX38U2nsvAug22OyDkcAA02YH6vAey48j7Y2//DbgCbwpq8wL3sW/VzbDyxU
iiYr2z14SUt70WDqp/C0Xvwz/1f4g/0SZI8p0ZSWmhUYXQTKHClErUIxxYA4TOs7
uH4XJ1xpqIhE6tGCZP5RMUeXp6mHwxPJAHq5+2/MZkwH12j6eGia54celMYnkl/y
fRFEEbU5NVkszflPWeNWkx+UIP1rIw0V5k67hKilDZ8ckKuoEARQEsGAApSFeN/W
swIDAQAB
-----END PUBLIC KEY-----

Ключевые сертификаты#

Можно устанавливать и запрашивать сертификаты для ключей, хранящихся на экземпляре NetHSM:

$ nitropy nethsm --host $NETHSM_HOST  set-certificate myFirstKey --mime-type application/x-pem-file /tmp/cert.pem

Updated the certificate for key myFirstKey on NetHSM localhost:8443
$ nitropy nethsm --host $NETHSM_HOST get-certificate myFirstKey > /tmp/cert.pem

Запросы на подписание сертификата ключа#

NetHSM поддерживает генерацию запросов на подписание сертификатов (CSR) для хранящихся ключей:

$ nitropy nethsm --host $NETHSM_HOST csr --key-id myFirstKey --country DE --state-or-province BE --locality Berlin --organization ACME --organizational-unit IT --common-name example.com --email-address it@example.com

Основные операции#

Мы можем зашифровать данные для ключа, хранящегося на NetHSM, с помощью OpenSSL. (public.pem - это файл открытого ключа, который мы создали в разделе «Показать сведения о ключе»).

$ echo 'NetHSM rulez!' | OpenSSL rsautl -encrypt -inkey public.pem -pubin | base64 > data.crypt
$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d

NetHSM rulez!

Аналогичным образом мы можем подписывать данные, используя ключ на NetHSM. Для RSA и ECDSA сначала нужно вычислить дайджест:

$ echo 'NetHSM rulez!' > data
$ openssl dgst -sha256 -binary data | base64 > data.digest

Затем мы можем создать подпись из этого дайджеста с помощью NetHSM:

$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PSS_SHA256 -d "$(cat data.digest)" | base64 -d > data.sig

А затем используйте OpenSSL для проверки подписи:

$ openssl dgst -sha256 -verify public.pem -signature data.sig -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:-1 data

Verified OK

Создание резервных копий#

Можно создать резервную копию NetHSM, которая будет содержать как конфигурацию, так и сохраненные ключи. Для создания резервной копии сначала необходимо задать парольную фразу, которая будет использоваться для шифрования файла резервной копии:

$ nitropy nethsm -h $NETHSM_HOST -u admin set-backup-passphrase

Updated the backup passphrase for NetHSM localhost:8443

Теперь необходимо создать пользователя с ролью R-Backup:

$ nitropy nethsm -h $NETHSM_HOST -u admin add-user --user-id backup --real-name "Backup User" --role backup

User backup added to NetHSM localhost:8443

Затем вы можете создать резервную копию и записать ее в файл:

$ nitropy nethsm -h $NETHSM_HOST backup /tmp/nethsm-backup

Backup for localhost:8443 written to /tmp/backup

Восстановление резервных копий#

Этот резервный файл может быть восстановлен на экземпляре NetHSM, не прошедшем ревизию:

$ nitropy nethsm -h $NETHSM_HOST restore --backup-passphrase backup-passphrase backupencryptionkey /tmp/nethsm-backup

Backup restored on NetHSM localhost:8443

Обновление NetHSM#

Предупреждение

Потеря данных может произойти из-за установки бета-версии обновления!

$ nitropy nethsm --host $NETHSM_HOST  update /tmp/nethsm-update.img.cpio

Image /tmp/nethsm-update.img.cpio uploaded to NetHSM localhost:8443

Если вы хотите продолжить установку, вы можете зафиксировать обновление:

$ nitropy nethsm --host $NETHSM_HOST     commit-update

Update successfully committed on NetHSM localhost:8443

Кроме того, можно отменить обновление:

$ nitropy nethsm --host $NETHSM_HOST  cancel-update

Update successfully cancelled on NetHSM localhost:8443