

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

# 在客户端和之间设置双向 TLS AWS CloudHSM （推荐）
<a name="getting-started-setup-mtls"></a>

以下主题描述了在客户端和 AWS CloudHSM之间启用相互传输层安全 (mTLS) 必须完成的步骤。

**注意事项**
+ 目前，此功能仅在 hsm2m.medium 上可用。有关 HSM 类型的更多信息，请参阅 [AWS CloudHSM 集群模式](cluster-hsm-types.md)。
+ 与一起 AWS Key Management Service使用的 AWS CloudHSM 密钥库不支持 mTLS。

**Topics**
+ [步骤 1：创建信任锚并将其注册到 HSM 上](#setup-mtls-create-and-register-trust-anchor)
+ [步骤 2：启用 mTLS AWS CloudHSM](#getting-start-setup-mtl-sdk)
+ [步骤 3：将 mTLS 的强制执行设置为 AWS CloudHSM](#getting-start-setup-mtls-enforcement)

## 步骤 1：创建信任锚并将其注册到 HSM 上
<a name="setup-mtls-create-and-register-trust-anchor"></a>

在启用 mTLS 之前，必须创建信任锚并将其注册到 HSM。这是一个包括两个步骤的过程：

**Topics**
+ [创建私有密钥和自签名根证书](#setup-mtls-create-trust-anchor)
+ [在 HSM 上注册信任锚](#setup-mtls-register-trust-anchor)

### 创建私有密钥和自签名根证书
<a name="setup-mtls-create-trust-anchor"></a>

**注意**  
对于生产集群，您将要创建的密钥应使用可信的随机掩码以安全的方式创建。建议您使用安全的异地和离线 HSM 或等效对象。安全地存储密钥。  
对于开发和测试，您可以使用任何方便的工具（例如 OpenSSL）来创建密钥并对根证书进行自签名。您需要密钥和根证书才能在[启用 mTLS 中签署客户端证书。 AWS CloudHSM](#getting-start-setup-mtl-sdk)

以下示例演示如何使用 [OpenSSL](https://www.openssl.org/) 创建私有密钥和自签名的根证书。

**Example - 使用 OpenSSL 创建私有密钥**  
使用以下命令创建已使用 AES-256 算法加密的 4096 位 RSA 密钥。要使用此示例，请*<mtls\$1ca\$1root\$11.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:
```

**Example – 使用 OpenSSL 创建自签名根证书**  
使用以下命令从刚刚创建的私有密钥创建名为 `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 上注册信任锚
<a name="setup-mtls-register-trust-anchor"></a>

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

**向 HSM 注册信任锚**

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

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

1. 使用 ** [使用 CloudHSM CLI 注册信任锚](cloudhsm_cli-cluster-mtls-register-trust-anchor.md) ** 命令注册信任锚。有关更多信息，请参阅以下示例或使用 **help cluster mtls register-trust-anchor** 命令。

**Example — 向集 AWS CloudHSM 群注册信任锚点**  
以下示例演示如何使用 CloudHSM CLI 中的 **cluster mtls register-trust-anchor** 命令向 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 支持 6980 字节的证书链。
成功注册信任锚后，您可以运行 **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：启用 mTLS AWS CloudHSM
<a name="getting-start-setup-mtl-sdk"></a>

要启用 mTLS AWS CloudHSM，您需要创建私钥和由我们在[创建中生成的根证书签名的客户端证书，并在 HSM 上注册信任锚点](#setup-mtls-create-and-register-trust-anchor)，然后使用任何 Client SDK 5 配置工具来设置私钥路径和客户端证书链路径。

**Topics**
+ [创建私有密钥和客户端证书链](#create-client-ssl)
+ [为 Client SDK 5 配置 mTLS](#enable-ssl-5)

### 创建私有密钥和客户端证书链
<a name="create-client-ssl"></a>

**Example - 使用 OpenSSL 创建私有密钥**  
使用以下命令创建 4096 位 RSA 密钥。要使用此示例，请*<ssl-client.key>*替换为要存储密钥的文件的名称。  

```
$ openssl genrsa -out <ssl-client.key> 4096
Generating RSA private key, 4096 bit long modulus
.....................................+++
.+++
e is 65537 (0x10001)
```

**Example – 使用 OpenSSL 生成证书签名请求（CSR）**  
使用以下命令从您刚刚创建的私有密钥生成证书签名请求（CSR）。阅读屏幕上的说明，并按照提示操作。  

```
$ openssl req -new -key <ssl-client.key> -out <ssl-client.csr>
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 []:
```

**Example – 使用根证书签署 CSR**  
使用以下命令通过我们在[创建信任锚并将其注册到 HSM 上](#setup-mtls-create-and-register-trust-anchor)中创建和注册的根证书对 CSR 进行签名，并创建名为 `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>
```

**Example – 创建客户端证书链**  
使用以下命令将我们在[创建信任锚并将其注册到 HSM 上](#setup-mtls-create-and-register-trust-anchor)中创建并注册的客户端证书和根证书结合起来，创建一个名为 `ssl-client.pem` 的客户端证书链，该证书链将在下一步的配置中使用。  

```
$ cat <ssl-client.crt> <mtls_ca_root_1.crt> > <ssl-client.pem>
```
 如果您将[创建信任锚并将其注册到 HSM 上](#setup-mtls-create-and-register-trust-anchor)中的中间证书注册为信任锚，请确保将客户端证书与整个证书链相结合以创建客户端证书链。

### 为 Client SDK 5 配置 mTLS
<a name="enable-ssl-5"></a>

使用任何 Client SDK 5 configure 工具通过提供正确的客户端密钥路径和客户端证书链路径启用双向 TLS。有关 Client SDK 5 的 configure 工具的更多信息，请参阅 [AWS CloudHSM 客户端 SDK 5 配置工具](configure-sdk-5.md)。

------
#### [ PKCS \$111 library ]

**在 Linux 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   $ sudo cp ssl-client.pem </opt/cloudhsm/etc>
   $ sudo cp ssl-client.key </opt/cloudhsm/etc>
   ```

1.  使用配置工具指定 `ssl-client.pem` 和 `ssl-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>
   ```

**在 Windows 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   cp ssl-client.pem <C:\ProgramData\Amazon\CloudHSM\ssl-client.pem>
   cp ssl-client.key <C:\ProgramData\Amazon\CloudHSM\ssl-client.key>
   ```

1.  使用 PowerShell 解释器，使用配置工具指定`ssl-client.pem`和`ssl-client.key`。

   ```
   PS C:\> & "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 ]

**在 Linux 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   $ sudo cp ssl-client.pem </opt/cloudhsm/etc>
   sudo cp ssl-client.key </opt/cloudhsm/etc>
   ```

1.  使用配置工具指定 `ssl-client.pem` 和 `ssl-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>
   ```

------
#### [ Key Storage Provider (KSP) ]

**在 Windows 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   cp ssl-client.pem <C:\ProgramData\Amazon\CloudHSM\ssl-client.pem>
   cp ssl-client.key <C:\ProgramData\Amazon\CloudHSM\ssl-client.key>
   ```

1.  使用 PowerShell 解释器，使用配置工具指定`ssl-client.pem`和`ssl-client.key`。

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\configure-ksp.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>
   ```

------
#### [ JCE provider ]

**在 Linux 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   $ sudo cp ssl-client.pem </opt/cloudhsm/etc>
   sudo cp ssl-client.key </opt/cloudhsm/etc>
   ```

1.  使用配置工具指定 `ssl-client.pem` 和 `ssl-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>
   ```

**在 Windows 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   cp ssl-client.pem <C:\ProgramData\Amazon\CloudHSM\ssl-client.pem>
   cp ssl-client.key <C:\ProgramData\Amazon\CloudHSM\ssl-client.key>
   ```

1.  使用 PowerShell 解释器，使用配置工具指定`ssl-client.pem`和`ssl-client.key`。

   ```
   PS C:\> & "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 ]

**在 Linux 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   $ sudo cp ssl-client.pem </opt/cloudhsm/etc>
   sudo cp ssl-client.key </opt/cloudhsm/etc>
   ```

1.  使用配置工具指定 `ssl-client.pem` 和 `ssl-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>
   ```

**在 Windows 上对 Client SDK 5 使用自定义证书和密钥进行 TLS 客户端-HSM 双向身份验证**

1. 将您的密钥和证书复制到相应目录。

   ```
   cp ssl-client.pem <C:\ProgramData\Amazon\CloudHSM\ssl-client.pem>
   cp ssl-client.key <C:\ProgramData\Amazon\CloudHSM\ssl-client.key>
   ```

1.  使用 PowerShell 解释器，使用配置工具指定`ssl-client.pem`和`ssl-client.key`。

   ```
   PS C:\> & "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：将 mTLS 的强制执行设置为 AWS CloudHSM
<a name="getting-start-setup-mtls-enforcement"></a>

使用任何客户端 SDK 5 配置工具进行配置后，客户端与 AWS CloudHSM 集群中的双向 TLS 连接。但是，从配置文件中删除私有密钥路径和客户端证书链路径将使连接再次转变为常规 TLS。您可以使用 CloudHSM CLI 通过完成以下步骤在集群中设置 mtls 强制执行：

1. 使用以下命令启动 CloudHSM CLI。

------
#### [ Linux ]

   ```
   $ /opt/cloudhsm/bin/cloudhsm-cli interactive
   ```

------
#### [ Windows ]

   ```
   PS C:\> & "C:\Program Files\Amazon\CloudHSM\bin\cloudhsm-cli.exe" interactive
   ```

------

1. 使用 CloudHSM CLI，以管理员身份登录。

   ```
   aws-cloudhsm > login --username <admin> --role admin
   Enter password:
   {
     "error_code": 0,
     "data": {
       "username": "<admin>",
       "role": "admin"
     }
   }
   ```
**注意**  
 1. 确保您已配置 CloudHSM CLI 并在 mTLS 连接下启动 CloudHSM CLI。  
 2. 在设置 mTLS 强制执行之前，必须以用户名为 **admin** 的默认管理员用户身份登录。

1. 使用 ** [使用 CloudHSM CLI 设置 mTLS 的强制执行级别](cloudhsm_cli-cluster-mtls-set-enforcement.md) ** 命令来设置强制执行。有关更多信息，请参阅以下示例或使用 **help cluster mtls set-enforcement** 命令。  
**Example — 使用集群设置 mTLS AWS CloudHSM 强制执行**  

   以下示例演示如何使用 CloudHSM CLI 中的 **cluster mtls set-enforcement** 命令为 HSM 设置 mTLS 强制执行。要使用此命令，用户名为 admin 的管理员必须登录到 HSM。

   ```
   aws-cloudhsm > cluster mtls set-enforcement --level cluster
   {
     "error_code": 0,
     "data": {
       "message": "Mtls enforcement level set to Cluster successfully"
     }
   }
   ```
**警告**  
在集群中强制执行 mTLS 使用后，所有现有非 mTLS 连接都将被丢弃，并且您只能使用 mTLS 证书连接到集群。