本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
步骤 2:生成或导入私有密钥和 SSL/TLS 证书
要启用 HTTPS,您的 Web 服务器应用程序(NGINX 或 Apache)需要一个私有密钥和相应的 SSL/TLS 证书。要将 Web 服务器 SSL/TLS 卸载与一起使用 AWS CloudHSM,必须将私钥存储在集群的 HSM 中。 AWS CloudHSM 您可以通过下列方式之一来完成此操作:
-
如果您没有私有密钥及相应的证书,则可以在 HSM 中生成私有密钥。使用私有密钥创建证书签名请求(CSR),并用它来创建 SSL/TLS 证书。
-
如果您已经有私有密钥及相应的证书,则可以将私有密钥导入到 HSM。
无论您选择上述哪种方法,您都可以从 HSM 中导出一个假 PEM 私有密钥,该私有密钥是 PEM 格式的私有密钥文件,其中包含对存储在 HSM 上的私有密钥的引用(它不是真正的私有密钥)。在 SSL/TLS 分载期间,您的 Web 服务器使用伪造的 PEM 私有密钥文件来识别 HSM 上的私有密钥。
请执行以下操作之一:
生成私有密钥和证书
生成私有密钥
本节将介绍如何使用客户端软件开发工具包 3 中的密钥管理实用程序(KMU) 生成密钥对。在 HSM 中生成密钥对后,即可将其导出为伪造 PEM 文件,并生成相应的证书。
使用密钥管理实用程序(KMU)生成的私有密钥可以与客户端软件开发工具包 3 和客户端软件开发工具包 5 一起使用。
安装和配置密钥管理实用程序(KMU)
-
连接到您的客户端实例。
-
安装和配置客户端软件开发工具包 3。
-
运行以下命令启动 AWS CloudHSM 客户端。
-
运行命令以启动 key_mgmt_util 命令行工具。
$
/opt/cloudhsm/bin/key_mgmt_util
-
运行以下命令登录 HSM。将
<user name>
和<password>
替换为加密用户 (CU) 的用户名和密码。Command:
loginHSM -u CU -s
<user name>
-p<password>>
生成私有密钥
根据您的使用案例,您可以生成 RSA 或 EC 密钥对。请执行以下操作之一:
-
在 HSM 上生成 RSA 私有密钥
使用
genRSAKeyPair
命令生成 RSA 密钥对。此示例生成一个模数为 2048、公有指数为 65537、标签为tls_rsa_keypair
的 RSA 密钥对。Command:
genRSAKeyPair -m 2048 -e 65537 -l tls_rsa_keypair
如果命令成功,则您应该看到以下表明您已成功生成了 RSA 密钥对的输出。
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
-
在 HSM 上生成 EC 私有密钥
使用
genECCKeyPair
命令生成 EC 密钥对。此示例生成一个曲线 ID 为 2(对应NID_X9_62_prime256v1
曲线)且标签为tls_ec_keypair
的 EC 密钥对。Command:
genECCKeyPair -i 2 -l tls_ec_keypair
如果命令成功,则您应该看到以下表明您已成功生成了 EC 密钥对的输出。
Cfm3GenerateKeyPair returned: 0x00 : HSM Return: SUCCESS Cfm3GenerateKeyPair: public key handle: 7 private key handle: 8 Cluster Status: Node id 1 status: 0x00000000 : HSM Return: SUCCESS
导出假 PEM 私有密钥文件
在 HSM 上拥有私有密钥后,您必须导出一个假 PEM 私有密钥文件。此文件不包含真密钥数据,但它允许 OpenSSL 动态引擎识别 HSM 上的私有密钥。您随后可以使用私有密钥创建证书签名请求(CSR),并签署 CSR 以创建证书。
注意
使用密钥管理实用程序(KMU)生成的伪造 PEM 文件可以与客户端软件开发工具包 3 和客户端软件开发工具包 5 一起使用。
识别与您要导出为假 PEM 的密钥对应的密钥句柄,然后运行以下命令以假 PEM 格式导出私有密钥并将其保存到文件中。将以下值替换为您自己的值。
-
<private_key_handle>
– 生成的私有密钥的句柄。此句柄由上一步的密钥生成命令之一生成。在上一示例中,私有密钥的句柄为 8。 -
<web_server_fake_PEM.key>
–写入假 PEM 密钥的文件名称。
Command:
getCaviumPrivKey -k
<private_key_handle>
-out<web_server_fake_PEM.key>
Exit
运行以下命令停止 key_mgmt_util。
Command:
exit
现在,您的系统上应该有一个新文件,该文件位于前述命令中<web_server_fake_PEM.key>
所指定的路径。此文件是假 PEM 私有密钥文件。
生成自签名证书
生成伪造 PEM 私有密钥文件后,即可使用此文件生成证书签名请求(CSR)和证书。
在生产环境中,您通常使用证书颁发机构 (CA) 通过 CSR 创建证书。测试环境无需 CA。如果您使用 CA,则请将 CSR 文件发送给他们,然后使用他们在您的适用于 HTTPS的 Web 服务器中为您提供的签名 SSL/TLS 证书。
除了使用 CA 之外,您还可以使用 AWS CloudHSM OpenSSL 动态引擎创建自签名证书。自签名证书不受浏览器的信任,不应在生产环境中使用。它们可在测试环境中使用。
警告
自签名证书只应在测试环境中使用。对于生产环境,请使用更安全的方法 (如证书颁发机构) 来创建证书。
安装和配置 OpenSSL 动态引擎
-
连接到您的客户端实例。
-
要安装和配置,请执行以下操作之一:
生成证书
-
获取前面步骤中生成的伪造 PEM 文件的副本。
-
创建 CSR
运行以下命令使用 AWS CloudHSM OpenSSL 动态引擎创建证书签名请求 (CSR)。将
<web_server_fake_PEM.key>
替换为包含您的伪造 PEM 私有密钥的文件的名称。将<web_server.csr>
替换为包含您的 CSR 的文件的名称。req
命令是交互式的。响应每个字段。字段信息将复制到您的 SSL/TLS 证书中。$
openssl req -engine cloudhsm -new -key
<web_server_fake_PEM.key>
-out<web_server.csr>
-
创建自签名证书
运行以下命令,使用 AWS CloudHSM OpenSSL 动态引擎在 HSM 上使用私钥签署您的 CSR。这会创建自签名证书。将命令中的以下值替换为您自己的值。
-
<web_server.csr>
– 包含 CSR 的文件的名称。 -
<web_server_fake_PEM.key>
– 包含伪造 PEM 私有密钥的文件的名称。 -
<web_server.crt>
– 将包含您的 Web 服务器证书的文件的名称。
$
openssl x509 -engine cloudhsm -req -days 365 -in
<web_server.csr>
-signkey<web_server_fake_PEM.key>
-out<web_server.crt>
-
完成这些步骤后,请转到 步骤 3:配置 Web 服务器。
导入现有私有密钥和证书
您可能已经有一个私有密钥和可用于 Web 服务器上的 HTTPS 的相应 SSL/TLS 证书。如果是,您可以按照本部分中的步骤将密钥导入 HSM。
注意
有关私有密钥导入和客户端软件开发工具包兼容性的一些说明:
-
导入现有私有密钥需要客户端软件开发工具包 3。
-
您可以结合使用客户端软件开发工具包 3 中的私有密钥与客户端软件开发工具包 5 中的私有密钥。
-
适用于客户端软件开发工具包 3 的 OpenSSL 动态引擎不支持最新 Linux 平台,但适用于客户端软件开发工具包 5 的 OpenSSL 动态引擎的实现支持最新 Linux 平台。您可以使用客户端软件开发工具包 3 提供的密钥管理实用程序(KMU)导入现有私有密钥,然后使用该私有密钥和客户端软件开发工具包 5 的 OpenSSL 动态引擎实现来支持最新 Linux 平台上的 SSL/TLS 分载。
使用客户端软件开发工具包 3 将现有私有密钥导入到 HSM
-
连接到您的 Amazon EC2 客户端实例。如有必要,将您的现有私有密钥和证书复制到该实例。
-
安装和配置客户端软件开发工具包 3
-
运行以下命令启动 AWS CloudHSM 客户端。
-
运行命令以启动 key_mgmt_util 命令行工具。
$
/opt/cloudhsm/bin/key_mgmt_util
-
运行以下命令登录 HSM。将
<user name>
和<password>
替换为加密用户 (CU) 的用户名和密码。Command:
loginHSM -u CU -s
<user name>
-p<password>
-
运行以下命令以将您的私有密钥导入到 HSM。
-
运行以下命令以创建仅对当前会话有效的对称包装密钥。命令和输出如下所示。
Command:
genSymKey -t 31 -s 16 -sess -l wrapping_key_for_import
Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS Symmetric Key Created. Key Handle: 6 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
-
运行以下命令以将您现有的私有密钥导入到 HSM。命令和输出如下所示。将以下值替换为您自己的值:
-
<web_server_existing.key>
– 包含您的私有密钥的文件的名称。 -
<web_server_imported_key>
– 您已导入私有密钥的标签。 -
<wrapping_key_handle>
– 由上述命令生成的包装密钥句柄。在上一示例中,包装密钥句柄为 6。
Command:
importPrivateKey -f
<web_server_existing.key>
-l<web_server_imported_key>
-w<wrapping_key_handle>
BER encoded key length is 1219 Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS Private Key Unwrapped. Key Handle: 8 Cluster Error Status Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
-
-
-
运行以下命令以伪造 PEM 格式导出私有密钥并将其保存到文件。将以下值替换为您自己的值。
-
<private_key_handle>
– 已导入私有密钥的句柄。此句柄由上一步骤中的第二个命令生成。在上一示例中,私有密钥的句柄为 8。 -
<web_server_fake_PEM.key>
– 包含您已导出伪造 PEM 私有密钥的文件的名称。
Command:
getCaviumPrivKey -k
<private_key_handle>
-out<web_server_fake_PEM.key>
-
-
运行以下命令停止 key_mgmt_util。
Command:
exit
完成这些步骤后,请转到 步骤 3:配置 Web 服务器。