

# 为客户端配置混合后量子 TLS
<a name="pqtls-how-to"></a>

要将 PQ-TLS 与 Amazon S3 结合使用，您需要将客户端配置为支持后量子密钥交换算法。您还要确保客户端支持混合方法，该方法将传统的椭圆曲线加密与后量子算法 [例如 ML-KEM（模块化格基密钥封装机制）] 相结合。

具体配置取决于客户端库和编程语言。有关多信息，请参阅[启用混合后量子 TLS](https://docs.aws.amazon.com/payment-cryptography/latest/userguide/pqtls-details.html)。

## 客户端配置示例：适用于 Java 2 的 AWS SDK
<a name="UsingEncryptionInTransit.PQ-TLS.configuration.java2-sdk"></a>

在此过程中，为 AWS 公共运行时 HTTP 客户端添加一个 Maven 依赖项。然后配置一个优先使用后量子 TLS 的 HTTP 客户端。然后，创建使用 HTTP 客户端的 Amazon S3 客户端。

**注意**  
AWS 公共运行时 HTTP 客户端现已开放预览版，并于 2023 年 2 月全面开放。在正式发行版中，`tlsCipherPreference` 类和 `tlsCipherPreference()` 方法参数已替换为 `postQuantumTlsEnabled()` 方法参数替。如果您在预览期间使用此示例，则需要更新您的代码。

1. 将 AWS 公共运行时客户端添加到您的 Maven 依赖项中。我们建议您使用最新可用版本。

   例如，以下语句将 AWS 公共运行时客户端的版本 `2.30.22` 添加到您的 Maven 依赖项中。

   ```
   <dependency>
       <groupId>software.amazon.awssdk</groupId>
       <artifactId>aws-crt-client</artifactId>
       <version>2.30.22</version>
   </dependency>
   ```

1. 要启用混合后量子密码套件，请将 AWS SDK for Java 2.x 添加到您的项目中并进行初始化。然后按照以下示例所示，在您的 HTTP 客户端上启用混合后量子密码套件。

   此代码使用 `postQuantumTlsEnabled()` 方法参数来配置 [AWS 通用运行时 HTTP 客户端](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/http-configuration-crt.html)，从而优先使用推荐的混合后量子密码套件（即 ECDH 与 ML-KEM 的组合）。然后，它使用配置的 HTTP 客户端来构建一个 Amazon S3 异步客户端实例（即 ）[https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html](https://sdk.amazonaws.com/java/api/latest/software/amazon/awssdk/services/s3/S3AsyncClient.html)。此代码完成后，`S3AsyncClient` 实例上的所有 [Amazon S3 API](https://docs.aws.amazon.com/AmazonS3/latest/API/) 请求都将使用混合后量子 TLS。
**重要**  
从 v2.35.11 开始，调用方不再需要设置 `.postQuantumTlsEnabled(true)` 来为客户端启用混合后量子 TLS。所有高于 v2.35.11 的版本都默认启用后量子 TLS。

   ```
   // Configure HTTP client
   SdkAsyncHttpClient awsCrtHttpClient = AwsCrtAsyncHttpClient.builder()
             .postQuantumTlsEnabled(true)
             .build();
   
   // Create the Amazon S3 async client
   S3AsyncClient s3Async = S3AsyncClient.builder()
            .httpClient(awsCrtHttpClient)
            .build();
   ```

1. 使用混合后量子 TLS 测试您的 Amazon S3 调用。

   在配置的 Amazon S3 客户端上调用 Amazon S3 API 操作时，系统会使用混合后量子 TLS 将您的调用传输到 Amazon S3 端点。要测试您的配置，您需要调用一个 Amazon S3 API，例如 `[ListBuckets](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html)`。

   ```
   ListBucketsResponse reponse = s3Async.listBuckets();
   ```

### 测试您的混合后量子 TLS 配置
<a name="pqtls-testing"></a>

请考虑在调用 Amazon S3 的应用程序上，使用混合密码套件运行下面的测试。
+ 运行负载测试和基准测试。混合密码套件的执行方式与传统密钥交换算法有所不同。您可能需要调整连接超时，以便增加握手时间。如果您在 AWS Lambda 函数内部运行，请增大执行超时设置。
+ 请尝试从不同位置进行连接。根据您的请求采用的网络路径，您可能会发现中间主机、代理或带有深度数据包检查 (DPI) 功能的防火墙阻止了请求。这可能是因为在 TLS 握手的 [ClientHello](https://tools.ietf.org/html/rfc5246#section-7.4.1.2) 部分中使用了新的密码套件，或者密钥交换消息比较大。如果您在解决这些问题时遇到麻烦，请与安全团队或 IT 管理员一起，更新相关配置并取消阻止新的 TLS 密码套件。