

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

# 在中强制使用最低 TLS 版本 适用于 Rust 的 AWS SDK
<a name="enforcing-tls"></a>

在与 AWS 服务通信时， 适用于 Rust 的 AWS SDK 使用 TLS 来提高安全性。默认情况下，SDK 强制实施 TLS 最低版本 1.2。默认情况下，SDK 还会协商客户端应用程序和服务可用的最高 TLS 版本。例如，SDK 可能能够协商 TLS 1.3。

通过手动配置 SDK 使用的 TCP 连接器，可以在应用程序中强制实施特定的 TLS 版本。为了说明这一点，以下示例向您展示了如何强制实施 TLS 1.3。

**注意**  
某些 AWS 服务尚不支持 TLS 1.3，因此强制使用此版本可能会影响 SDK 的互操作性。我们建议在生产部署之前对每项服务测试此配置。

```
pub async fn connect_via_tls_13() -> Result<(), Error> {
    println!("Attempting to connect to KMS using TLS 1.3: ");

    // Let webpki load the Mozilla root certificates.
    let mut root_store = RootCertStore::empty();
    root_store.add_server_trust_anchors(webpki_roots::TLS_SERVER_ROOTS.0.iter().map(|ta| {
        rustls::OwnedTrustAnchor::from_subject_spki_name_constraints(
            ta.subject,
            ta.spki,
            ta.name_constraints,
        )
    }));

    // The .with_protocol_versions call is where we set TLS1.3. You can add rustls::version::TLS12 or replace them both with rustls::ALL_VERSIONS
    let config = rustls::ClientConfig::builder()
        .with_safe_default_cipher_suites()
        .with_safe_default_kx_groups()
        .with_protocol_versions(&[&rustls::version::TLS13])
        .expect("It looks like your system doesn't support TLS1.3")
        .with_root_certificates(root_store)
        .with_no_client_auth();

    // Finish setup of the rustls connector.
    let rustls_connector = hyper_rustls::HttpsConnectorBuilder::new()
        .with_tls_config(config)
        .https_only()
        .enable_http1()
        .enable_http2()
        .build();

    // See https://github.com/awslabs/smithy-rs/discussions/3022 for the HyperClientBuilder
    let http_client = HyperClientBuilder::new().build(rustls_connector);

    let shared_conf = aws_config::defaults(BehaviorVersion::latest())
        .http_client(http_client)
        .load()
        .await;

    let kms_client = aws_sdk_kms::Client::new(&shared_conf);
    let response = kms_client.list_keys().send().await?;

    println!("{:?}", response);

    Ok(())
}
```