在客户端和 AWS CloudHSM (推荐)TLS之间设置互动 - AWS CloudHSM

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

在客户端和 AWS CloudHSM (推荐)TLS之间设置互动

以下主题描述了在客户端和之间启用双向 TLS (mTLS) 功能必须完成的步骤 AWS CloudHSM。目前,此功能仅在 hsm2m.medium 上提供。有关HSM类型的更多信息,请参阅AWS CloudHSM 集群模式

第 1 步。创建信任锚并将其注册到 HSM

在启用 m HSM 之前,必须创建信任锚并将其注册到上TLS。这是一个分为两个步骤的过程:

创建私钥和自签名根证书

注意

对于生产集群,您将要创建的密钥应使用可信的随机掩码以安全的方式创建。我们建议您使用安全的异地和离线模式HSM或等效方式。安全地存储密钥。

对于开发和测试,您可以使用任何便捷的工具(例如 OpenSSL)来创建密钥并对根证书进行自签名。您需要密钥和根证书才能在启用 m 中对客户端证书TLS进行签名 AWS CloudHSM。

以下示例说明如何使用 Ope n SSL 创建私钥和自签名根证书。

例 — 使用 Open 创建私钥 SSL

使用以下命令创建使用 -256 算法加密的 4096 位RSA密钥。AES要使用此示例,请替换 <mtls_ca_root_1.key> 使用您要存储密钥的文件的名称。

$ openssl genrsa -out <mtls_ca_root_1.key> -aes256 4096 Generating RSA private key, 4096 bit long modulus .....................................+++ .+++ e is 65537 (0x10001) Enter pass phrase for mtls_ca_root_1.key: Verifying - Enter pass phrase for mtls_ca_root_1.key:
例 — 使用 Open 创建自签名根证书 SSL

使用以下命令创建自签名根证书,该证书以您刚刚创建mtls_ca_root_1.crt的私钥命名。该证书的有效期为 25 年(9130 天)。阅读屏幕上的说明,并按照提示操作。

$ openssl req -new -x509 -days 9130 -key mtls_ca_root_1.key -out mtls_ca_root_1.crt Enter pass phrase for mtls_ca_root_1.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:

将信任锚注册到 HSM

创建自签名根证书后,管理员必须将其注册为 AWS CloudHSM 集群的信任锚点。

要向注册信任锚点 HSM
  1. 使用以下命令启动 Cloud HSMCLI:

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    C:\Program Files\Amazon\CloudHSM\bin\> .\cloudhsm-cli.exe interactive
  2. 使用 Cloud HSMCLI,以管理员身份登录。

    aws-cloudhsm > login --username admin --role admin Enter password: { "error_code": 0, "data": { "username": "admin", "role": "admin" } }
  3. 使用 在 Cloud 上注册信任锚点 HSM CLI 命令注册信任锚。有关更多信息,请参阅以下示例或使用 help cluster mtls register-trust-anchor 命令。

例 — 向集 AWS CloudHSM 群注册信任锚点

以下示例说明如何在 Cloud 中使用cluster mtls register-trust-anchor命令将信任锚注册HSMCLI到HSM。要使用此命令,管理员必须登录到HSM。将这些值替换为您自己的值:

aws-cloudhsm > cluster mtls register-trust-anchor --path </path/mtls_ca_root_1.crt> { "error_code": 0, "data": { "trust_anchor": { "certificate-reference": "0x01", "certificate": "<PEM Encoded Certificate>", "cluster-coverage": "full" } } }
注意

AWS CloudHSM 支持将中间证书注册为信任锚。在这种情况下,需要将整个经PEM编码的证书链文件注册到上HSM,证书按层次顺序排列。

AWS CloudHSM 支持带有 2048 位RSA密钥的长度为 4 的证书链、带有 3072 位密钥的长度为 3 的证书链、带有 4096 位RSA密钥的长度为 3 的证书链以及带有 EC RSA 密钥的长度为 6 的证书链。

成功注册信任锚后,您可以运行cluster mtls list-trust-anchors命令来检查当前注册的信任锚,如下所示:

aws-cloudhsm > cluster mtls list-trust-anchors { "error_code": 0, "data": { "trust_anchors": [ { "certificate-reference": "0x01", "certificate": "<PEM Encoded Certificate>", "cluster-coverage": "full" } ] } }
注意

可以在 hsm2m.medium 上注册的信任锚的最大数量为两 (2) 个。

第 2 步。启TLS用 m AWS CloudHSM

要启用 m TLS AWS CloudHSM,您需要创建私钥和由我们在创建中生成的根证书签名的客户端证书,并在上注册信任锚点 HSM,然后使用任何 Client SDK 5 配置工具来设置私钥路径和客户端证书链路径。

创建私钥和客户端证书链

例 — 使用 Open 创建私钥 SSL

使用以下命令创建使用 -256 算法加密的 4096 位RSA密钥。AES要使用此示例,请替换 <ssl-client.key> 使用您要存储密钥的文件的名称。

$ openssl genrsa -out <ssl-client.key> -aes256 4096 Generating RSA private key, 4096 bit long modulus .....................................+++ .+++ e is 65537 (0x10001) Enter pass phrase for ssl-client.key: Verifying - Enter pass phrase for ssl-client.key:
例 — 使用 Open 生成证书签名请求 (CSR) SSL

使用以下命令根据您刚刚创建的私钥生成证书签名请求 (CSR)。阅读屏幕上的说明,并按照提示操作。

$ openssl req -new -key <ssl-client.key> -out <ssl-client.csr> Enter pass phrase for ssl-client.key: You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (e.g. server FQDN or YOUR name) []: Email Address []:
例 — CSR 使用根证书签名

使用以下命令CSR使用我们在创建中创建和注册的根证书签名,并在上注册信任锚HSM并创建名为的客户端证书ssl-client.crt。该证书的有效期为 5 年(1826 天)。

$ openssl x509 -req -days 1826 -in <ssl-client.csr> -CA <mtls_ca_root_1.crt> -CAkey <mtls_ca_root_1.key> -CAcreateserial -out <ssl-client.crt>
例 — 创建客户证书链

使用以下命令合并我们在创建中创建和注册的客户端证书和根证书,并在上注册信任锚点,HSM然后创建一个名为的客户端证书链ssl-client.pem,该证书链将在下一步中用于配置。

$ cat <ssl-client.crt> <mtls_ca_root_1.crt> > <ssl-client.pem>
注意

如果您在 C reate 中注册了中间证书,并将信任锚注册到HSM作为信任锚上,请确保将客户端证书与整个证书链结合起来以创建客户端证书链。

TLS为客户端 SDK 5 配置 m

使用任何 Client SDK 5 配置工具,TLS通过提供正确的客户端密钥路径和客户端证书链路径来启用双向。有关客户端 SDK 5 配置工具的更多信息,请参阅AWS CloudHSM 客户端 SDK 5 配置工具

PKCS #11 library
要使用自定义证书和密钥进行TLS客户端-在 Linux 上与客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc $ sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 使用配置工具指定 ssl-client.pemssl-client.key

    $ sudo /opt/cloudhsm/bin/configure-pkcs11 \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
要使用自定义证书和密钥进行TLS客户端-在 Windows 上使用客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. 使用 PowerShell 解释器,使用配置工具指定ssl-client.pemssl-client.key

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-pkcs11.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key
OpenSSL Dynamic Engine
要使用自定义证书和密钥进行TLS客户端-在 Linux 上与客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 使用配置工具指定 ssl-client.pemssl-client.key

    $ sudo /opt/cloudhsm/bin/configure-dyn \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
JCE provider
要使用自定义证书和密钥进行TLS客户端-在 Linux 上与客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 使用配置工具指定 ssl-client.pemssl-client.key

    $ sudo /opt/cloudhsm/bin/configure-jce \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
要使用自定义证书和密钥进行TLS客户端-在 Windows 上使用客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. 使用 PowerShell 解释器,使用配置工具指定ssl-client.pemssl-client.key

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-jce.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key
CloudHSM CLI
要使用自定义证书和密钥进行TLS客户端-在 Linux 上与客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    $ sudo cp ssl-client.pem /opt/cloudhsm/etc sudo cp ssl-client.key /opt/cloudhsm/etc
  2. 使用配置工具指定 ssl-client.pemssl-client.key

    $ sudo /opt/cloudhsm/bin/configure-cli \ --client-cert-hsm-tls-file /opt/cloudhsm/etc/ssl-client.pem \ --client-key-hsm-tls-file /opt/cloudhsm/etc/ssl-client.key
要使用自定义证书和密钥进行TLS客户端-在 Windows 上使用客户端 SDK 5 进行HSM相互身份验证
  1. 将您的密钥和证书复制到相应目录。

    cp ssl-client.pem C:\ProgramData\Amazon\CloudHSM\ssl-client.pem cp ssl-client.key C:\ProgramData\Amazon\CloudHSM\ssl-client.key
  2. 使用 PowerShell 解释器,使用配置工具指定ssl-client.pemssl-client.key

    & "C:\Program Files\Amazon\CloudHSM\bin\configure-cli.exe" ` --client-cert-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.pem ` --client-key-hsm-tls-file C:\ProgramData\Amazon\CloudHSM\ssl-client.key

第 3 步。将 m TLS 强制执行设置为 AWS CloudHSM

使用任何 Client SDK 5 配置工具进行配置后,集群TLS中客户端和客户端之间的连接 AWS CloudHSM 将是相互的。但是,从配置文件中删除私钥路径和客户端证书链路径将使连接TLS再次变为常规连接。通过完成以下步骤 HSMCLI,您可以使用 Cloud 在集群中设置 mtls 强制执行:

  1. 使用以下命令启动 Cloud HSMCLI:

    Linux
    $ /opt/cloudhsm/bin/cloudhsm-cli interactive
    Windows
    C:\Program Files\Amazon\CloudHSM\bin\> .\cloudhsm-cli.exe interactive
  2. 使用 Cloud HSMCLI,以管理员身份登录。

    aws-cloudhsm > login --username admin --role admin Enter password: { "error_code": 0, "data": { "username": "admin", "role": "admin" } }
    注意

    1. 确保您已配置云HSMCLI并在 m TLS 连接HSMCLI下启动云。

    2. 在设置TLS强制执行之前,你必须以默认管理员用户身份登录,用户名为管理员。

  3. 使用 使用 Cloud 设置 m TLS 强制等级 HSM CLI 命令来设置强制执行。有关更多信息,请参阅以下示例或使用 help cluster mtls set-enforcement 命令。

    例 — 使用集 AWS CloudHSM 群设置 m TLS 强制执行

    以下示例说明如何在 Cloud 中使用cluster mtls set-enforcement命令HSMCLI来设置 m TLS 强制执行HSM。要使用此命令,用户名为管理员的管理员必须登录到HSM。

    aws-cloudhsm > cluster mtls set-enforcement --level cluster { "error_code": 0, "data": { "message": "Mtls enforcement level set to Cluster successfully" } }
    警告

    在集群中强制TLS使用 m 后,所有现有的非 m TLS 连接都将被丢弃,并且您只能使用 m 个TLS证书连接到集群。