本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为 AWS CloudHSM 集群配置法定身份验证后,如果加密用户的HSM密钥具有关联的法定值,则他们将无法自行执行密钥管理或使用操作。本主题说明加密用户如何获取临时令牌来执行HSM密钥管理或密钥使用操作。
注意
每个法定令牌对一个操作都有效。该操作成功后,令牌将不再有效,加密用户必须获取新令牌。法定令牌仅在您当前的登录会话期间有效。如果您注销云端HSMCLI或网络断开连接,则令牌将不再有效,您需要获取新的令牌。您只能在云端使用云端HSM令牌HSMCLI。您不能使用它在其他应用程序中进行身份验证。
以下示例显示了配置法定身份验证HSM后,加密用户尝试使用法定关联密钥创建签名时的输出。该命令失败并出现Quorum Failed
错误,这意味着法定身份验证失败:
aws-cloudhsm >
crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz
{ "error_code": 1, "data": "Quorum Failed" }
加密用户必须完成以下任务才能获得临时令牌,以便在上执行密钥管理或密钥使用操作:HSM
第 1 步:获取仲裁令牌
-
启动云端HSMCLI。
$
/opt/cloudhsm/bin/cloudhsm-cli interactive
-
以加密用户身份登录集群。
aws-cloudhsm >
login --username
--passwordcrypto_user1
--role crypto-userpassword123
此示例HSMCLI使用
crypto-user
角色登录云端。crypto_user1
用您自己的值替换这些值。{ "error_code": 0, "data": { "username": "crypto_user1", "role": "crypto-user" } }
-
使用命令生成法定令牌。quorum token-sign generate
在以下命令中,
key-usage
标识您将在其中使用正在生成的令牌的服务名称。在本例中,令牌用于密钥使用操作(key-usage
服务)。此示例使用该--filter
标志将令牌与特定密钥相关联。aws-cloudhsm >
quorum token-sign generate --service key-usage --token
</path/crypto_user1.token>
--filter attr.label=rsa-private-key-example{ "error_code": 0, "data": { "path": "/home/crypto_user1.token" } }
此示例为具有用户名的加密用户获取法定令牌,
crypto_user1
并将该令牌保存到名为的文件中。crypto_user1.token
要使用示例命令,可将这些值替换为您自己的值:该quorum token-sign generate命令在指定的文件路径上生成密钥使用服务法定令牌。你可以检查令牌文件:
$
cat
</path/crypto_user1.token>
{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [] }
令牌路径包含以下内容:
-
服务:与令牌关联的法定服务的标识符。
-
key_ref erence:与该法定令牌关联的密钥的标识符。
-
approval_dat a:由. 生成的 base64 编码的原始数据令牌。HSM
-
标记:一个 base64 编码且经过哈希处理的 ap SHA proval_data 令牌
-
签名:未签名令牌的 base64 编码的签名令牌(签名)数组。每个批准者签名都采用JSON对象文字的形式:
{ "username": "
<APPROVER_USERNAME>
", "role": "<APPROVER_ROLE>
", "signature": "<APPROVER_RSA2048_BIT_SIGNATURE>
" }每个签名都是根据审批者使用其相应的 RSA 2048 位私钥的结果创建的,该私钥的公钥已在中注册。HSM
-
-
验证新的用户服务法定令牌。该quorum token-sign list命令确认令牌存在于 Cloud 上HSM。
aws-cloudhsm >
quorum token-sign list
{ "error_code": 0, "data": { "tokens": [ { "username": "crypto_user", "service": "key-usage", "key-reference": "0x0000000000680006", "minimum-token-count": 2 } ] } }
minimum-token-count
提供了一个聚合的集群视图,其中显示了与从集群中的单个用户名、服务和密钥引用HSM中检索到的密钥令牌相对应的最小可用密钥令牌数量。例如,假设HSM集群为 2 个,如果我们收到用户为密钥生成的两 (2) 个密钥使用令牌,并参考
0x0000000000680006
集群HSM中的第一个密钥使用令牌,并且我们收到用户crypto_user1
为密钥生成的一 (1) 个密钥使用令牌,并参考0x0000000000680006
集群HSM中的另一个密钥使用令牌,我们将显示。crypto_user1
"minimum-token-count": 1
第 2 步:从批准的加密用户那里获取签名
拥有法定令牌的加密用户必须获得其他加密用户的批准。为了获得批准,其他加密=-用户使用他们的签名密钥在外部对令牌进行加密签名。HSM
可通过多种不同方式对令牌进行签名。以下示例说明如何使用 Open 对令牌进行签名SSL。
在此示例中,拥有令牌 (crypto-user
) 的加密用户需要至少两 (2) 次批准。以下示例命令显示两 (2) 个加密用户如何使用 Open 对令牌SSL进行加密签名。
-
解码 base64 编码的未签名令牌,并将其放入二进制文件:
$
echo -n '5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=' | base64 -d > crypto_user1.bin
-
使用 Open SSL 和批准者的私钥签署用户服务的二进制法定未签名令牌并创建二进制签名文件:
$
openssl pkeyutl -sign \ -inkey crypto_user1.key \ -pkeyopt digest:sha256 \ -keyform PEM \ -in crypto_user1.bin \ -out crypto_user1.sig.bin
-
将二进制签名编码为 base64:
$
base64 -w0 crypto_user1.sig.bin > crypto_user1.sig.b64
-
使用之前为批准者签名指定的JSON对象文字格式,将 base64 编码的签名复制并粘贴到令牌文件中:
{ "version": "2.0", "service": "key-usage", "key_reference": "0x0000000000680006", "approval_data": "AAIABQAAABkAAAAAAGgABi5CDa9x9VyyRIaFbkSrHgJjcnlwdG9fdXNlcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABnPQBLAAAAAAAAAAAAAgAFAAAAGgAAAAAAaAAGQvd2qKY+GJj8gXo9lKuANGNyeXB0b191c2VyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGc9AEsAAAAAAAAAAA==", "token": "5GlgoWOlQU4fw4QIlbxkPGZVOVoDugFGuSKE/k67ncM=", "signatures": [ { "username": "crypto_user1", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" }, { "username": "crypto_user2", "role": "crypto-user", "signature": "wa7aPzmGwBjcEoZ6jAzYASp841AfgOvcI27Y/tGlCj1E9DawnFw5Uf0IJT2Ca7T5XD2ThVkUi0B+dhAomdqYNl6aUUFrJyH9GBJ+E0PmA5jNVm25tzeRWBJzneTg4/zTeE2reNqrHFHicWnttQLe9jS09J1znuDGWDe0HaBKWUaz2gUInJRqmeXDsZYdSvZksrqUH5dci/RsaDE2+tGiS9g0RcIkFbsPW4HpGe2e5HVzGsqrV8O3PKlYQv6+fymfcNTTuoxKcHAkOjpl43QSuSIu2gVq7KI8mSmmWaPJL47NPjmcBVB5vdEQU+oiukaNfLJr+MoDKzAvCGDg4cDArg==" } ] }
第 3 步:在 CloudHSM; 集群上批准令牌并执行操作
在加密用户获得必要的批准和签名后,他们可以将该令牌以及密钥管理或密钥使用操作提供给 Cloud HSM 集群。
确保密钥操作对应于与法定令牌关联的相应法定人数服务。有关更多信息,请参阅 支持的服务和类型 了解更多信息。
在交易过程中,令牌将在 AWS CloudHSM 集群内获得批准并执行所请求的密钥操作。密钥操作的成功取决于经批准的有效法定令牌和有效的密钥操作。
例 使用 RSA-PKCS 机制生成签名
在以下示例中,已登录的加密用户使用以下密钥创建签名:HSM
aws-cloudhsm >
crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /path/crypto_user1.token
{ "error_code": 0, "data": { "key-reference": "0x0000000000640007", "signature": "h6hMqXacBrT3x3MXV13RXHdQno0+IQ6iy0kVrGzo23+eoWT0ZZgrSpBCu5KcuP6IYYHw9goQ5CfPf4jI1nO5m/IUJtF1A1lmcz0HjEy1CJ7ICXNReDRyeOU8m43dkJzt0OUdkbtkDJGAcxkbKHLZ02uWsGXaQ8bOKhoGwsRAHHF6nldTXquICfOHgSd4nimObKTqzUkghhJW5Ot5oUyLMYP+pZmUS38ythybney94Wj6fzYOER8v7VIY5ijQGa3LfxrjSG4aw6QijEEbno5LSf18ahEaVKmVEnDBL54tylCJBGvGsYSY9HNhuJoHPgiDL/TDd2wfvP4PaxbFRyyHaw==" } }
如果加密用户尝试使用相同的令牌执行另一个HSM密钥使用操作,则会失败:
aws-cloudhsm >
crypto sign rsa-pkcs --key-filter attr.label=rsa-private-key-example --hash-function sha256 --data YWJjMTIz --approval /home/crypto_user1.token
{ "error_code": 1, "data": "Quorum approval is required for this operation" }
要执行另一项HSM密钥操作,加密用户必须生成新的法定令牌,从批准者那里获得新的签名,然后使用--approver 参数执行所需的密钥操作以提供法定令牌。
使用quorum token-sign list来检查是否有可用的令牌。此示例显示加密用户没有已批准的令牌。
aws-cloudhsm >
quorum token-sign list
{ "error_code": 0, "data": { "tokens": [] } }