运作#

本章描述了具有*管理员*和*操作者*角色的用户的操作任务。请参考`角色<administration.html#roles>`__一章,了解更多关于角色的信息。

重要

请确保你在开始工作前阅读`本文件<index.html>`__开头的信息。

关键管理#

生成密钥#

NetHSM可以生成密钥对。建议指定密钥ID选项,给它一个有表现力的名字。

支持的钥匙类型及其相应机制如下。

钥匙类型

机制

TAG

RSA_Decryption_RAW`````RSA_Decryption_PKCS1 ``RSA_Decryption_OAEP_MD5 ` ```RSA_Decryption_OAEP_SHA1`````RSA_Decryption_OAEP_SHA224 RSA_Decryption_OAEP_SHA256 RSA_Decryption_OAEP_SHA384 `` ``RSA_Decryption_OAEP_SHA512<xid="226"></x>` ``RSA_Signature_PKCS1 RSA_Signature_PSS_MD5 RSA_Signature_PSS_SHA1` ``</x> <xid=”308”></x>`` RSA_Signature_PSS_SHA256 RSA_Signature_PSS_SHA384 ```x id=”395”></x>``x id=”419”></x

Curve25519

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

AES_Encryption_CBC`````AES_Decryption_CBC`

密钥可以按以下方式生成。

需要的角色

该操作需要以*Administrator*角色进行认证。

必要的选项

选项

描述

-p`, ``--port` INTEGER`

生成密钥的类型。``KEYTYPE``参数的可能值可以在上面的表中找到。

-m`, ``--mechanism` MECHANISM`

生成密钥的机制。``MECHANISM``参数的可能值可以在上表中找到。

-l`, ``--length` INTEGER`

生成的密钥的长度

可选择的选项

选项

描述

-k`, ``--key-id` TEXT`

生成的钥匙的ID

例子

$ 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可以将现有的私钥导入到*钥匙库。

支持的钥匙类型及其相应机制如下。

钥匙类型

机制

TAG

RSA_Decryption_RAW`````RSA_Decryption_PKCS1 ``RSA_Decryption_OAEP_MD5 ` ```RSA_Decryption_OAEP_SHA1`````RSA_Decryption_OAEP_SHA224 RSA_Decryption_OAEP_SHA256 RSA_Decryption_OAEP_SHA384 `` ``RSA_Decryption_OAEP_SHA512<xid="226"></x>` ``RSA_Signature_PKCS1 RSA_Signature_PSS_MD5 RSA_Signature_PSS_SHA1` ``</x> <xid=”308”></x>`` RSA_Signature_PSS_SHA256 RSA_Signature_PSS_SHA384 ```x id=”395”></x>``x id=”419”></x

Curve25519

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

EdDSA_Signature

USER_ID

AES_Encryption_CBC`````AES_Decryption_CBC`

可以按以下方式启动进口。

需要的角色

该操作需要以*Administrator*角色进行认证。

必要的选项

选项

描述

-p`, ``--port` INTEGER`

生成密钥的类型。``KEYTYPE``参数的可能值可以在上面的表中找到。

-m`, ``--mechanism` MECHANISM`

生成密钥的机制。``MECHANISM``参数的可能值可以在上表中找到。

-u`, ``--user-id` TEXT`

RSA 密钥的质数 p,base64 编码

-u`, ``--user-id` TEXT`

基 64 编码的 RSA 密钥质数 q

-e`, ``--public-exponent` ``TEXT` ``.

RSA 密钥的公共指数,base64 编码

-d`, ``--data` TEXT`

ED25519 或 ECDSA_* 密钥的基 64 编码密钥数据

可选择的选项

选项

描述

-k`, ``--key-id` TEXT`

新钥匙的ID

--tags````TEXT

新钥匙的标签

例子

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

删除键#

NetHSM可以从*钥匙库*中删除钥匙。

需要的角色

该操作需要以*Administrator*角色进行认证。

论点

争论

描述

--time

要删除的钥匙的钥匙ID

例子

$ nitropy nethsm --host $NETHSM_HOST delete-key myFirstKey
Key myFirstKey deleted on NetHSM localhost:8443

列表键#

NetHSM可以列出*钥匙库*中所有可用的钥匙。

该清单可以按以下方式检索。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

可选择的选项

选项

描述

-f,``–filter````TEXT``

要搜索的标签

例子

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

Key ID          Type       Mechanisms                                      Operations  Tags
-----------     ----       ----------------------------------------------  ----------  ----
myFirstKey      RSA        RSA_Decryption_PKCS1, RSA_Signature_PSS_SHA256  0

显示关键细节#

NetHSM可以输出关于存储的钥匙的更多详细信息。

详细信息可按以下方式检索。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

例子

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey
Key myFirstKey on NetHSM localhost:8443:
Type:            RSA
Mechanisms:      RSA_Decryption_RAW
Operations:      0
Modulus:         r62XHPWMDdEf2I1WEpSxGowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMPa7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5PGQ==
Public exponent: AQAB

密钥的公钥可按如下方式获取。它采用 PKCS#8 格式。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

例子

$ nitropy nethsm --host $NETHSM_HOST get-key myFirstKey --public-key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr62XHPWMDdEf2I1WEpSx
GowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu
5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMP
a7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct
4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723
Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5P
GQIDAQAB
-----END PUBLIC KEY-----

例如,可以用OpenSSL检查公钥,方法如下。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

例子

nitropy nethsm --host= $NETHSM_HOST get-key myFirstKey --public-key | openssl rsa -pubin -text
Public-Key: (2048 bit)
Modulus:
   00:af:ad:97:1c:f5:8c:0d:d1:1f:d8:8d:56:12:94:
   b1:1a:8c:18:fd:f4:05:f2:53:0f:b6:fd:c4:51:02:
   44:fc:f2:d6:06:f7:a1:17:c1:b4:41:8d:c0:55:56:
   77:7a:d9:50:5a:22:ab:78:eb:86:0f:1e:0d:af:63:
   c5:35:80:2e:e5:ff:89:3f:62:5c:d6:5b:05:34:e6:
   05:f0:3f:36:44:5e:35:30:1c:92:6d:04:7e:93:ee:
   38:37:fd:38:07:46:a1:4c:10:b1:5f:ea:2f:14:7e:
   d2:77:a4:b3:bf:13:0f:6b:b1:0a:be:16:8e:b0:b6:
   e0:ca:b3:e5:15:9c:50:9e:12:04:a8:94:42:4a:8e:
   43:45:10:fe:09:10:8f:a4:65:ec:55:78:05:6c:9a:
   cd:8a:58:76:d6:2f:0e:64:27:2d:e2:70:b6:39:2d:
   7d:d4:c7:83:2a:60:87:e2:d8:eb:7c:b3:30:38:a2:
   44:f3:32:a5:c2:17:6d:03:5b:8c:63:8f:7e:26:e6:
   82:e3:c1:94:16:c2:d8:c1:b2:e9:d7:bd:b7:52:fd:
   4f:8d:98:c2:e6:36:d4:85:27:03:d2:ef:48:fa:23:
   6b:ab:39:c0:7a:46:b8:75:6b:09:f6:38:00:fa:1e:
   a1:6e:54:a0:0a:cd:08:dc:c5:8e:b0:c5:f1:fd:8e:
   4f:19
Exponent: 65537 (0x10001)
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr62XHPWMDdEf2I1WEpSx
GowY/fQF8lMPtv3EUQJE/PLWBvehF8G0QY3AVVZ3etlQWiKreOuGDx4Nr2PFNYAu
5f+JP2Jc1lsFNOYF8D82RF41MBySbQR+k+44N/04B0ahTBCxX+ovFH7Sd6SzvxMP
a7EKvhaOsLbgyrPlFZxQnhIEqJRCSo5DRRD+CRCPpGXsVXgFbJrNilh21i8OZCct
4nC2OS191MeDKmCH4tjrfLMwOKJE8zKlwhdtA1uMY49+JuaC48GUFsLYwbLp1723
Uv1PjZjC5jbUhScD0u9I+iNrqznAeka4dWsJ9jgA+h6hblSgCs0I3MWOsMXx/Y5P
GQIDAQAB
-----END PUBLIC KEY-----

钥匙的标签#

标签 可用于对按键设置细粒度的访问限制,是一项可选功能。一个按键可以分配一个或多个*标签* 。操作员 用户可以查看所有按键,但只能使用至少有一个相应*标签的按键* 。如果某个密钥没有*Tag* ,则所有*操作员* 用户都可以使用该密钥。操作员 用户不能修改*Tag* 。

要了解如何在*操作者*账户上使用*标记,请参考`用户的标记<administration.html#tags-for-users>`__一章。

注解

*标签*由具有*管理员*角色的用户无限制地管理。

可以按以下方式添加*标签。

需要的角色

该操作需要以*Administrator*角色进行认证。

论点

争论

描述

--time

用于设置标签的钥匙ID

TAG

要在钥匙上设置的标签

例子

$ nitropy nethsm --host $NETHSM_HOST add-key-tag myFirstKey berlin
Added tag berlin for key myFirstKey on the NetHSM localhost:8443

可以按以下方式删除*标签。

需要的角色

该操作需要以*Administrator*角色进行认证。

论点

争论

描述

--time

要设置标签的钥匙ID。

TAG

要设置在钥匙上的标签。

例子

$ nitropy nethsm --host $NETHSM_HOST delete-key-tag myFirstKey berlin
Deleted tag berlin for key myFirstKey on the NetHSM localhost:8443

关键证书#

可以为存储在NetHSM上的钥匙设置和查询证书。

支持的MIME类型如下。

  • application/x-pem-file

  • application/x-x509-ca-cert

  • application/pgp-keys

该证书可按以下方式设置。

需要的角色

该操作需要以*Administrator*角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

为其设置证书的钥匙的ID。

可选择的选项

选项

描述

-m`, ``--mechanism` MECHANISM`

证书的MIME类型。可用的MIME类型在上面列出。

论点

争论

描述

FILENAME

证书文件

例子

$ nitropy nethsm --host $NETHSM_HOST set-certificate --key-id myFirstKey --mime-type application/x-pem-file /tmp/cert.pem
Updated the certificate for key myFirstKey on NetHSM localhost:8443

该证书可按以下方式检索。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

获取证书的钥匙的ID。

例子

$ nitropy nethsm --host $NETHSM_HOST get-certificate --key-id myFirstKey
-----BEGIN CERTIFICATE-----
MIICeTCCAWECFCbuzdkAvc3Zx3W53IoSnmhUen42MA0GCSqGSIb3DQEBCwUAMHsx
CzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcMBkJlcmxpbjER
MA8GA1UECgwITml0cm9rZXkxFTATBgNVBAMMDG5pdHJva2V5LmNvbTEgMB4GCSqG
SIb3DQEJARYRaW5mb0BuaXRyb2tleS5jb20wHhcNMjIwODMwMjAxMzA2WhcNMjMw
ODMwMjAxMzA2WjBxMW8wCQYDVQQGEwJERTANBgNVBAcMBkJlcmxpbjANBgNVBAgM
BkJlcmxpbjAPBgNVBAoMCE5pdHJva2V5MBMGA1UEAwwMbml0cm9rZXkuY29tMB4G
CSqGSIb3DQEJARYRaW5mb0BuaXRyb2tleS5jb20wKjAFBgMrZXADIQDc58LGDY9B
wbJFdXTiDalNXrDC60Sxu3eHcpnh1MSoCjANBgkqhkiG9w0BAQsFAAOCAQEAGip8
aU5nJnzm3eic3t1ihUA3VJ0mAPyfrb1Rn8tEKOZo3vg0jpRd9CSESlBsKqhvxsdQ
A3eomM+W7R37TL5+ISm5QrbijLHz3OHoPM68c1Krz3bXTkJetf4YAxpLOPYfXXHv
weRzwVJb4y3E0lJGhZxI3sUE8Yn/T1UvTbu/o/O5P/XTA8vfFrSNQkQxWBgYh4gC
KjFFALqUPFrctSFIi34aqpdihNJWnjSS2Y7INm3oxwkR3NMKP8x4wBGfZK22nHnu
PPzXuMGJTmQM8GHTzltNvLx5Iv2sXoSHClXSpdIT5IBIcR1GmZ78fmcr75OAU0+z
3XbJq/1ij3tKsjV6WA==
-----END CERTIFICATE-----

密钥证书签名请求#

NetHSM支持为存储的密钥生成CSR(证书签名请求)。

需要的角色

该操作需要以*管理员*或*操作者*的角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

用于生成CSR的钥匙的ID。

--country`````TEXT`

国家名称

--state-or-province`````TEXT`

州或省的名称

--locality`````TEXT`

地点名称

--organization`````TEXT`

组织名称

--organizational-unit`````TEXT`

组织单位名称

--common-name`````TEXT``

俗称

--email-address`````TEXT`

电子邮件地址

例子

$ nitropy nethsm --host $NETHSM_HOST csr --key-id myFirstKey --country="DE" --state-or-province="Berlin" --locality="Berlin" --organization="Nitrokey" --organizational-unit="" --common-name=nitrokey.com --email-address="info@nitrokey.com"
-----BEGIN CERTIFICATE REQUEST-----
MIHxMIGkAgEAMHExbzAJBgNVBAYTAkRFMA0GA1UEBwwGQmVybGluMA0GA1UECAwG
QmVybGluMA8GA1UECgwITml0cm9rZXkwEwYDVQQDDAxuaXRyb2tleS5jb20wHgYJ
KoZIhvcNAQkBFhFpbmZvQG5pdHJva2V5LmNvbTAqMAUGAytlcAMhADJMNAifke6s
u7CYqHGDy3xGtXVOUNbTJG6Gn4oki+j3oAAwBQYDK2VwA0EAQilRK2Mf6kfJ4ByI
WCn9A+8IHsnE7iFcuFZpmaKfcJwZiaQppHvPg/Z0zqldzviPQ1cjKR7hSZG+8GHH
gWjEDg==
-----END CERTIFICATE REQUEST-----

关键业务#

加密#

NetHSM可以对存储在*Key Store* 的对称密钥进行数据加密。相反,用非对称钥匙加密数据不能在NetHSM上进行,因为公钥密码学的概念是让每个人都能得到公钥。对于非对称密钥,NetHSM提供了公共密钥,可以用外部工具进行加密。请参考`显示密钥细节<operation.html#show-key-details>`__,以了解更多关于如何在*密钥存储* 中检索一个密钥的公开密钥。

数据可以按以下方式对对称密钥进行加密。

需要的角色

该操作需要用*操作者*角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

用于加密数据的密钥 ID

-d`, ``--data` TEXT`

Base64 编码的数据

-m`, ` ` ` ``–mode` [AES_CBC]

加密模式

-iv`, ` ` ` ``–initialization-vector` TEXT

Base64 编码的初始化向量

例子

$ nitropy nethsm --host $NETHSM_HOST encrypt -k myFirstKey -d "TmV0SFNNIHJ1bGV6enp6enp6enp6enp6enp6enp6IQo=" -m AES_CBC -iv "aYlwUI4A9zL9tts4dMAq+A=="
Encrypted: Uk+9pgucdxTnbyIb/6+BDJef+HfRWhw+Eg3RcCvyHaU=
Initialization vector: aYlwUI4A9zL9tts4dMAq+A==

这将打印经过加密和base64编码的消息``NetHSM rulezzzzzzzzzzzzzzzzzzz!``,以及初始化向量。

可以用OpenSSL对非对称密钥进行如下加密。

$ echo 'NetHSM rulez!' | openssl pkeyutl -encrypt -pubin -inkey public.pem | base64 > data.crypt

这将加密和base64编码的信息``NetHSM rulez!`` 写入文件``data.crypt``,使用``public.pem`` 的公钥。

解密#

NetHSM可以为存储在NetHSM上的*Key Store*的私钥解密数据。这个例子使用了上一章的加密信息 Encrypt

支持的解密模式如下。

  • TAG

  • PKCS1

  • FILENAME

  • --network

  • OAEP_SHA224

  • OAEP_SHA224

  • OAEP_SHA224

  • OAEP_SHA224

  • USER_ID

数据可以被解密如下。

需要的角色

该操作需要用*操作者*角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

用于解密数据宽度的钥匙的ID

-d`, ``--data` TEXT`

以Base64编码的加密数据

-d`, ``--data` TEXT`

解密模式。可用的模式在上面列出。

例子

$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d
NetHSM rulez!

签名#

NetHSM可以为存储在NetHSM的*Key Store*中的私钥签署数据。对于使用RSA和ECDSA密钥的签名,必须先计算出摘要。

要计算一个摘要,首先需要数据。一个信息的创建方法如下。

$ echo 'NetHSM rulez!' > data

该摘要用OpenSSL计算如下。

$ openssl dgst -sha256 -binary data | base64 > data.digest

支持的签名模式如下。

  • PKCS1

  • USER_ID

  • FILENAME

  • Curve25519

  • Curve25519

  • Curve25519

  • Curve25519

  • PKCS1

  • PKCS1

从摘要中可以创建一个签名,如下所示。

需要的角色

该操作需要用*操作者*角色进行认证。

必要的选项

选项

描述

-k`, ``--key-id` TEXT`

签署数据宽度的钥匙的ID

-d`, ``--data` TEXT`

要使用Base64编码的数据

-d`, ``--data` TEXT`

符号模式

例子

$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PKCS1 -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可以以Base64字符串的形式提供随机字节。

需要的角色

该操作需要用*操作者*角色进行认证。

论点

争论

描述

--time

检索的字节数

例子

nitropy nethsm --host $NETHSM_HOST random 4
94A2rg==