1 个不稳定版本
0.1.0 | 2024 年 4 月 23 日 |
---|
#1437 在 密码学
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_SHA256
和 TLS_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
: 注意: 如果您希望启用 x25519
或 chacha
,您可以在此处将其添加为功能。
[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