运作#
本章描述了具有*管理员*和*操作者*角色的用户的操作任务。请参考`角色<administration.html#roles>`__一章,了解更多关于角色的信息。
重要
请确保你在开始工作前阅读`本文件<index.html>`__开头的信息。
关键管理#
生成密钥#
NetHSM可以生成密钥对。建议指定密钥ID选项,给它一个有表现力的名字。
支持的钥匙类型及其相应机制如下。
钥匙类型 |
机制 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
密钥分配给生成密钥的用户的`命名空间<administration.html#namespaces>`__。
密钥可以按以下方式生成。
需要的角色
该操作需要以*Administrator*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
生成密钥的类型。``KEYTYPE``参数的可能值可以在上面的表中找到。 |
|
生成密钥的机制。``MECHANISM``参数的可能值可以在上表中找到。 |
|
生成的密钥的长度 |
可选择的选项
选项 |
描述 |
---|---|
|
生成的钥匙的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
有关`/keys/generate` 端点的信息,请参见 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys_generate>`__。
进口钥匙#
NetHSM可以将现有的私钥导入到*钥匙库。
支持的钥匙类型及其相应机制如下。
钥匙类型 |
机制 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
密钥分配给导入密钥的用户的`命名空间<administration.html#namespaces>`__。
将私钥从 PEM 文件导入 NetHSM 的步骤如下。
需要的角色
该操作需要以*Administrator*角色进行认证。
论点
争论 |
描述 |
---|---|
|
PEM 格式的私钥文件 |
可选择的选项
选项 |
描述 |
---|---|
|
生成密钥的机制。``MECHANISM``参数的可能值可以在上表中找到。 |
|
新钥匙的ID |
|
新钥匙的标签 |
例子
$ nitropy nethsm --host $NETHSM_HOST import-key \
--mechanism RSA_Signature_PSS_SHA256 \
--mechanism RSA_Decryption_PKCS1 \
--key-id myFirstKey \
mykey.pem
Key myFirstKey added to NetHSM localhost:8443
有关`/keys` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys>`__。
原始格式的私钥可按如下方式导入。
需要的角色
该操作需要以*Administrator*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
生成密钥的类型。``KEYTYPE``参数的可能值可以在上面的表中找到。 |
|
生成密钥的机制。``MECHANISM``参数的可能值可以在上表中找到。 |
|
RSA 密钥的质数 p,base64 编码 |
|
基 64 编码的 RSA 密钥质数 q |
RSA 密钥的公共指数,base64 编码 |
|
|
ED25519 或 ECDSA_* 密钥的基 64 编码密钥数据 |
可选择的选项
选项 |
描述 |
---|---|
|
新钥匙的ID |
|
新钥匙的标签 |
例子
$ 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
有关`/keys` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys>`__。
删除键#
NetHSM 可以从*Key Store* 中删除密钥。用户只能删除其`命名空间<administration.html#namespaces>`__中的密钥。
需要的角色
该操作需要以*Administrator*角色进行认证。
论点
争论 |
描述 |
---|---|
|
要删除的钥匙的钥匙ID |
例子
$ nitropy nethsm --host $NETHSM_HOST delete-key myFirstKey
Key myFirstKey deleted on NetHSM localhost:8443
有关`/keys/{KeyID}`端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/delete_keys__KeyID_>`__。
列表键#
NetHSM 可以列出*Key Store* 中的所有键,这些键位于当前用户的`命名空间<administration.html#namespaces>`__中。
该清单可以按以下方式检索。
需要的角色
该操作需要以*管理员*或*操作者*的角色进行认证。
可选择的选项
选项 |
描述 |
---|---|
|
要搜索的标签 |
例子
$ 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
有关`/keys` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/get_keys>`__。
显示关键细节#
NetHSM 可以输出有关存储密钥的更详细信息。用户只能访问其`命名空间<administration.html#namespaces>`__中的密钥。
详细信息可按以下方式检索。
需要的角色
该操作需要以*管理员*或*操作者*的角色进行认证。
例子
$ 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
有关`/keys/{KeyID}`端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/get_keys__KeyID_>`__。
密钥的公钥可按如下方式获取。它采用 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-----
有关`/keys/{KeyID}/public.pem`端点的信息,请参阅 “API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/get_keys__KeyID__public_pem>`___。
例如,可以用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-----
有关`/keys/{KeyID}/public.pem`端点的信息,请参阅 “API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/get_keys__KeyID__public_pem>`___。
关键证书#
可以为存储在NetHSM上的钥匙设置和查询证书。
支持的MIME类型如下。
application/x-pem-file
application/x-x509-ca-cert
application/pgp-keys
该证书可按以下方式设置。
需要的角色
该操作需要以*Administrator*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
为其设置证书的钥匙的ID。 |
可选择的选项
选项 |
描述 |
---|---|
|
证书的MIME类型。可用的MIME类型在上面列出。 |
论点
争论 |
描述 |
---|---|
|
证书文件 |
例子
$ 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
有关`/keys/{KeyID}/cert` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/put_keys__KeyID__cert>`__。
该证书可按以下方式检索。
需要的角色
该操作需要以*管理员*或*操作者*的角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
获取证书的钥匙的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-----
有关`/keys/{KeyID}/cert` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/put_keys__KeyID__cert>`__。
密钥证书签名请求#
NetHSM支持为存储的密钥生成CSR(证书签名请求)。
需要的角色
该操作需要以*管理员*或*操作者*的角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
用于生成CSR的钥匙的ID。 |
|
国家名称 |
|
州或省的名称 |
|
地点名称 |
|
组织名称 |
|
组织单位名称 |
|
俗称 |
|
电子邮件地址 |
例子
$ 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-----
有关`/keys/{KeyID}/csr.pem`端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys__KeyID__csr_pem>`__。
关键业务#
本章所述的所有操作只能对当前用户的`命名空间<administration.html#namespaces>`__中的键执行。
加密#
NetHSM可以对存储在*Key Store* 的对称密钥进行数据加密。相反,用非对称钥匙加密数据不能在NetHSM上进行,因为公钥密码学的概念是让每个人都能得到公钥。对于非对称密钥,NetHSM提供了公共密钥,可以用外部工具进行加密。请参考`显示密钥细节<operation.html#show-key-details>`__,以了解更多关于如何在*密钥存储* 中检索一个密钥的公开密钥。
数据可以按以下方式对对称密钥进行加密。
需要的角色
该操作需要用*操作者*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
用于加密数据的密钥 ID |
|
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==
关于`/keys/{KeyID}/encrypt`端点的信息可以在`API文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys__KeyID__encrypt>`__中找到。
这将打印经过加密和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
数据可以被解密如下。
需要的角色
该操作需要用*操作者*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
用于解密数据宽度的钥匙的ID |
|
以Base64编码的加密数据 |
|
解密模式。可用的模式在上面列出。 |
例子
$ nitropy nethsm -h $NETHSM_HOST decrypt -k myFirstKey -d "$(cat data.crypt)" -m PKCS1 | base64 -d
NetHSM rulez!
有关`/keys/{KeyID}/decrypt` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys__KeyID__decrypt>`__。
签名#
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
从摘要中可以创建一个签名,如下所示。
需要的角色
该操作需要用*操作者*角色进行认证。
必要的选项
选项 |
描述 |
---|---|
|
签署数据宽度的钥匙的ID |
|
要使用Base64编码的数据 |
|
符号模式 |
例子
$ nitropy nethsm -h $NETHSM_HOST sign -k myFirstKey -m PKCS1 -d "$(cat data.digest)" | base64 -d > data.sig
有关`/keys/{KeyID}/sign` 端点的信息,请参阅 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_keys__KeyID__sign>`__。
创建的签名可以用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字符串的形式提供随机字节。
需要的角色
该操作需要用*操作者*角色进行认证。
论点
争论 |
描述 |
---|---|
|
检索的字节数 |
例子
nitropy nethsm --host $NETHSM_HOST random 4
94A2rg==
有关`/random` 端点的信息,请参见 `API 文档<https://nethsmdemo.nitrokey.com/api_docs/index.html#/default/post_random>`__。