在适用于 Rust 的 AWS SDK 中强制实施最低版本的 TLS - 适用于 Rust 的 AWS SDK

在适用于 Rust 的 AWS SDK 中强制实施最低版本的 TLS

在与 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(()) }