1 个不稳定版本

0.1.0 2024 年 4 月 23 日

#1437密码学

Apache-2.0 OR ISC OR MIT

74KB
1K SLoC

SymCrypt 为 Rustls 提供的提供商

此软件包通过实现 rustls 所需的特质,提供使用 SymCrypt 加密功能的集成,与 rustls 软件包一起使用。

平台支持

  • Windows AMD64: 完全支持。
  • Azure Linux: 完全支持。
  • Ubuntu: 部分支持。虽然进行了测试,但不能保证在所有 Ubuntu 环境中具有完全兼容性和最佳性能。

限制

  • QUIC 协议:不支持。
  • 集成工作:正在进行与 rustls-cng 和 rustls-platform-verifier 的集成。

支持的加密套件

以下列出支持的加密套件,按优先级排序。IE:默认配置优先使用 TLS13_AES_256_GCM_SHA384 而不是 TLS13_AES_128_GCM_SHA256

TLS 1.3

TLS13_AES_256_GCM_SHA384
TLS13_AES_128_GCM_SHA256
TLS13_CHACHA20_POLY1305_SHA256 // Enabled with the `chacha` feature

注意: 默认禁用 TLS13_CHACHA20_POLY1305_SHA256。要在 Cargo.toml 中启用此加密套件,请启用 chacha 功能。

TLS 1.2

TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 // Enabled with the `chacha` feature
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256 // Enabled with the `chacha` feature

注意: 默认禁用 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256。要在 Cargo.toml 中启用此加密套件,请启用 chacha 功能。

支持的关键交换

以下列出支持的关键交换,按优先级排序。IE:优先使用 SECP384R1 而不是 SECP256R1

SECP384R1
SECP256R1
X25519 // Enabled with the `x25519` feature

注意: 默认禁用 X25519。要启用,请在 Cargo.toml 中添加 x25519 功能。

依赖关系

此软件包依赖于 symcrypt 软件包,并要求您拥有针对您的架构的必要的 symcrypt 二进制文件。有关下载所需二进制文件的说明,请参阅 rust-symcrypt 快速入门指南

使用方法

rustls-symcrypt 添加到您的 Cargo.toml注意: 如果您希望启用 x25519chacha,您可以在此处将其添加为功能。

[dependencies]
# Disabling aws-lc as it slows down build times and is not needed.
rustls = { version = "0.23.0", features = ["ring", "tls12", "std"], default-features = false }
rustls_symcrypt = "0.1.0"
# To enable the chacha feature:
# rustls_symcrypt = {version = "0.1.0", features = ["chacha"]}

默认配置

使用 default_symcrypt_provider() 为使用上述列出的默认加密套件和密钥交换组的 ClientConfig

use rustls::{ClientConfig, RootCertStore};
use rustls_symcrypt::default_symcrypt_provider;
use std::sync::Arc;
use webpki_roots;

fn main() {
    let mut root_store = RootCertStore {
        roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
    };
    let mut config =
        ClientConfig::builder_with_provider(Arc::new(default_symcrypt_provider()))
            .with_safe_default_protocol_versions()
            .unwrap()
            .with_root_certificates(root_store)
            .with_no_client_auth();

    // Rest of the connection setup
}

自定义配置

要修改或更改 ClientConfig 中协商的加密套件的顺序,请使用 custom_symcrypt_provider()

use rustls::{ClientConfig, RootCertStore};
use rustls_symcrypt::{custom_symcrypt_provider, TLS13_AES_128_GCM_SHA256, SECP256R1};
use std::sync::Arc;
use webpki_roots;

fn main() {
    let mut root_store = RootCertStore {
        roots: webpki_roots::TLS_SERVER_ROOTS.iter().cloned().collect(),
    };

    // Set custom config of cipher suites that have been imported from rustls_symcrypt.
    let cipher_suites = vec![TLS13_AES_128_GCM_SHA256];
    let kx_group = vec![SECP256R1];

    let mut config =
        ClientConfig::builder_with_provider(Arc::new(custom_symcrypt_provider(
            Some(cipher_suites), Some(kx_group))))
                .with_safe_default_protocol_versions()
                .unwrap()
                .with_root_certificates(root_store)
                .with_no_client_auth();

    // Rest of the connection setup
}

依赖关系

~17–29MB
~544K SLoC