

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

# 在应用程序负载均衡器上配置双向 TLS
<a name="configuring-mtls-with-elb"></a>

要使用双向 TLS 传递模式，只需要将侦听器配置为接受来自客户端的任何证书即可。当使用双向 TLS 传递时，应用程序负载均衡器会使用 HTTP 标头将整个客户端证书链发送到目标，这使您能够在应用程序中实现相应的身份验证和授权逻辑。有关更多信息，请参阅[为您的应用程序负载均衡器创建 HTTPS 侦听器](create-https-listener.md)。

 当您在验证模式下使用相互 TLS 时，应用程序负载均衡器会在负载均衡器协商 TLS 连接时为客户端执行 X.509 客户端证书身份验证。

要使用双向 TLS 验证模式，请执行下列操作：
+ 创建新的信任存储资源。
+ 上传您的证书颁发机构（CA）捆绑包和（可选）吊销列表。
+ 将信任存储附加到配置为验证客户端证书的侦听器。

按照本节中的过程在应用程序负载均衡器上配置双向 TLS 验证模式。

**Topics**
+ [创建信任存储](#create-trust-store)
+ [关联信任存储](#associate-trust-store)
+ [替换 CA 证书捆绑包](#replace-ca-cert-bundle)
+ [添加证书吊销列表](#add-cert-revocation-list)
+ [删除证书吊销列表](#delete-cert-revocation-list)
+ [删除信任存储](#delete-trust-store)

## 创建信任存储
<a name="create-trust-store"></a>

如果在创建负载均衡器或侦听器时添加了信任存储，该信任存储会自动关联到新侦听器。否则，您必须自行将其关联到侦听器。

**先决条件**
+ 要创建信任存储，您必须拥有来自证书颁发机构（CA）的证书捆绑包。

------
#### [ Console ]

以下示例使用控制台的**信任存储**部分创建一个信任存储。您也可以在创建 HTTP 侦听器时创建信任存储库。

**创建信任存储**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上，选择**信任存储**。

1. 选择**创建信任存储**。

1. **信任存储配置**

   1. 对于**信任存储**，输入信任存储的名称。

   1. 对于**证书颁发机构捆绑包**，输入要使用的 CA 证书捆绑包的 Amazon S3 路径。

   1. （可选）使用**对象版本**选择 CA 证书捆绑包的早期版本。否则，将使用当前版本。

1. （可选）对于**吊销**，您可以选择将证书吊销列表添加到信任存储。

   1. 选择**添加新 CRL**，然后在 Amazon S3 中输入证书吊销列表的位置。

   1. （可选）使用**对象版本**选择证书吊销列表的先前版本。否则，将使用当前版本。

1. （可选）展开**信任存储标签**，可为您的信任存储输入最多 50 个标签。

1. 选择**创建信任存储**。

------
#### [ AWS CLI ]

**创建信任存储**  
使用 [create-trust-store](https://docs.aws.amazon.com/cli/latest/reference/elbv2/create-trust-store.html) 命令。

```
aws elbv2 create-trust-store \
    --name my-trust-store \
    --ca-certificates-bundle-s3-bucket amzn-s3-demo-bucket \
    --ca-certificates-bundle-s3-key certificates/ca-bundle.pem
```

------
#### [ CloudFormation ]

**创建信任存储**  
定义类型为的资源[AWS::ElasticLoadBalancingV2::TrustStore](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-truststore.html)。

```
Resources:
  myTrustStore:
    Type: 'AWS::ElasticLoadBalancingV2::TrustStore'
    Properties:
      Name: my-trust-store
      CaCertificatesBundleS3Bucket: amzn-s3-demo-bucket
      CaCertificatesBundleS3Key: certificates/ca-bundle.pem
```

------

## 关联信任存储
<a name="associate-trust-store"></a>

创建信任存储后，您必须将其与侦听器关联，然后应用程序负载均衡器才能开始使用信任存储。每个安全侦听器只能关联一个信任存储，但一个信任存储可以关联到多个侦听器。

------
#### [ Console ]

您可以按以下过程中所示，将信任存储关联到现有侦听器。您也可以在创建 HTTPS 侦听器时关联信任存储。有关更多信息，请参阅[创建 HTTPS 侦听器](create-https-listener.md)。

**关联信任存储**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格中，选择**负载均衡器**。

1. 选择负载均衡器。

1. 在**侦听器和规则**选项卡上，选择 **Protocol:Port** 列中的链接以打开安全侦听器的详细信息页面。

1. 在**安全**选项卡上，选择**编辑安全侦听器设置**。

1. 如果未启用双向 TLS，请在**客户端证书处理**下选择**双向身份验证（mTLS）**，然后选择**使用信任存储进行验证**。

1. 对于**信任存储**，请选择该信任存储。

1. 选择**保存更改**。

------
#### [ AWS CLI ]

**关联信任存储**  
使用 [modify-listener](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-listener.html) 命令。

```
aws elbv2 modify-listener \
    --listener-arn listener-arn \
    --mutual-authentication "Mode=verify,TrustStoreArn=trust-store-arn"
```

------
#### [ CloudFormation ]

**关联信任存储**  
更新[AWS::ElasticLoadBalancingV2::Listener](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-listener.html)资源。

```
Resources:
  myHTTPSListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties: 
      LoadBalancerArn: !Ref myLoadBalancer
      Protocol: HTTPS
      Port: 443
      DefaultActions:
        - Type: "forward"
          TargetGroupArn: !Ref myTargetGroup
      SslPolicy: ELBSecurityPolicy-TLS13-1-2-2021-06
      Certificates: 
        - CertificateArn: certificate-arn
      MutualAuthentication:
        - Mode: verify
          TrustStoreArn: trust-store-arn
```

------

## 替换 CA 证书捆绑包
<a name="replace-ca-cert-bundle"></a>

CA 证书捆绑包是信任存储的一个必需组件。它是经过证书颁发机构验证的受信任的根证书和中间证书的集合。这些经过验证的证书确保客户端可以信任所呈现的证书由负载均衡器拥有。

一个信任存储一次只能包含一个 CA 证书捆绑包，但是您可以在创建信任存储后随时替换 CA 证书捆绑包。

------
#### [ Console ]

**替换 CA 证书捆绑包**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上，选择**信任存储**。

1. 选择该信任存储。

1. 依次选择**操作**、**替换 CA 捆绑包**。

1. 在**替换 CA 捆绑包**页面的**证书颁发机构捆绑包**下，输入所需 CA 捆绑包的 Amazon S3 位置。

1. （可选）使用**对象版本**选择证书吊销列表的先前版本。否则，将使用当前版本。

1. 选择**替换 CA 捆绑包**。

------
#### [ AWS CLI ]

**替换 CA 证书捆绑包**  
使用 [modify-trust-store](https://docs.aws.amazon.com/cli/latest/reference/elbv2/modify-trust-store.html) 命令。

```
aws elbv2 modify-trust-store \
    --trust-store-arn trust-store-arn \
    --ca-certificates-bundle-s3-bucket amzn-s3-demo-bucket-new \
    --ca-certificates-bundle-s3-key certificates/new-ca-bundle-pem
```

------
#### [ CloudFormation ]

**更新 CA 证书捆绑包**  
定义类型为的资源[AWS::ElasticLoadBalancingV2::TrustStore](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-truststore.html)。

```
Resources:
  myTrustStore:
    Type: 'AWS::ElasticLoadBalancingV2::TrustStore'
    Properties:
      Name: my-trust-store
      CaCertificatesBundleS3Bucket: amzn-s3-demo-bucket-new
      CaCertificatesBundleS3Key: certificates/new-ca-bundle.pem
```

------

## 添加证书吊销列表
<a name="add-cert-revocation-list"></a>

或者，您可以为信任存储创建证书吊销列表。吊销列表由证书颁发机构发布，包含已吊销证书的数据。应用程序负载均衡器仅支持 PEM 格式的证书吊销列表。

当将证书吊销列表添加到信任存储时，系统会为其提供吊销 ID。每个添加到信任存储库的吊销列表都会 IDs 增加，并且无法更改。

应用程序负载均衡器无法吊销证书吊销列表中具有负序列号的证书。

------
#### [ Console ]

**添加吊销列表**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上，选择**信任存储**。

1. 选择信任存储以查看其详细信息页面。

1. 在**证书吊销列表**选项卡上，依次选择**操作**、**添加吊销列表**。

1. 在**添加吊销列表**页面上的**证书吊销列表**下，输入所需证书吊销列表的 Amazon S3 位置

1. （可选）使用**对象版本**选择证书吊销列表的先前版本。否则，将使用当前版本。

1. 选择**添加吊销列表**

------
#### [ AWS CLI ]

**添加吊销列表**  
使用 [add-trust-store-revocations](https://docs.aws.amazon.com/cli/latest/reference/elbv2/add-trust-store-revocations.html) 命令。

```
aws elbv2 add-trust-store-revocations \
    --trust-store-arn trust-store-arn \
    --revocation-contents "S3Bucket=amzn-s3-demo-bucket,S3Key=crl/revoked-list.crl,RevocationType=CRL"
```

------
#### [ CloudFormation ]

**添加吊销列表**  
定义类型为 “[AWS::ElasticLoadBalancingV2::TrustStore撤销](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-elasticloadbalancingv2-truststorerevocation.html)” 的资源。

```
Resources:
  myRevocationContents:
    Type: 'AWS:ElasticLoadBalancingV2::TrustStoreRevocation'
    Properties:
      TrustStoreArn: !Ref myTrustStore
      RevocationContents:
        - RevocationType: CRL
          S3Bucket: amzn-s3-demo-bucket
          S3Key: crl/revoked-list.crl
```

------

## 删除证书吊销列表
<a name="delete-cert-revocation-list"></a>

如果不再需要某个证书吊销列表，可以将其删除。删除信任存储中的某个证书吊销列表后，其吊销 ID 也奖被删除，并且在信任存储的有效期内不会重新使用。

------
#### [ Console ]

**删除吊销列表**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上，选择**信任存储**。

1. 选择该信任存储。

1. 在**证书吊销列表**选项卡上，依次选择**操作**、**删除吊销列表**。

1. 当系统提示进行确认时，输入 **confirm**。

1. 选择**删除**。

------
#### [ AWS CLI ]

**删除吊销列表**  
使用 [remove-trust-store-revocations](https://docs.aws.amazon.com/cli/latest/reference/elbv2/remove-trust-store-revocations.html) 命令。

```
aws elbv2 remove-trust-store-revocations \
    --trust-store-arn trust-store-arn \
    --revocation-ids id-1 id-2 id-3
```

------

## 删除信任存储
<a name="delete-trust-store"></a>

当您不再使用某个信任存储时，可以将其删除。不能删除关联到侦听器的信任存储。

------
#### [ Console ]

**删除信任存储**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 在导航窗格上，选择**信任存储**。

1. 选择该信任存储。

1. 选择**删除**。

1. 提示进行确认时，输入 `confirm`，然后选择**删除**。

------
#### [ AWS CLI ]

**删除信任存储**  
使用 [delete-trust-store](https://docs.aws.amazon.com/cli/latest/reference/elbv2/delete-trust-store.html) 命令。

```
aws elbv2 delete-trust-store \
    --trust-store-arn trust-store-arn
```

------