Rustls 是一个用 Rust 编写的现代 TLS 库。
Rustls 在许多组织和项目的生产中使用。我们的目标是保持合理的 API 表面稳定性,但随着我们进行更改以适应新功能或性能改进,API 可能会不断发展。
我们有未来计划的路线图。我们还有基准测试来防止性能下降,并让您评估目标硬件上的 rustl。
如果您想提供帮助,请参阅 CONTRIBUTING.md。
每个版本中更改的详细列表可以在 https://github.com/rustls/rustls/releases 中找到。
https://docs.rs/rustls/
Rustls 是一个 TLS 库,旨在提供良好的加密安全级别,无需配置即可实现该安全性,并且默认情况下不提供不安全的功能或过时的加密技术。
Rustls 为客户端和服务器实现了 TLS1.2 和 TLS1.3。查看协议功能的完整列表。
虽然 Rustls 本身是独立于平台的,但默认情况下它使用aws-lc-rs
来实现 TLS 中的加密。有关 aws-lc-rs 中平台/架构支持限制的更多详细信息,请参阅 aws-lc-rs 常见问题解答。
还可以通过ring
crate 功能使用ring
:请参阅支持的ring
目标平台。
通过提供crypto::CryptoProvider
结构的自定义实例,您可以替换 rustls 的所有加密依赖项。这是可移植到更广泛的架构和环境或合规性要求的途径。有关更多详细信息,请参阅crypto::CryptoProvider
文档。
依赖 rustls 时指定default-features = false
将删除对 aws-lc-rs 的依赖。
Rustls 需要 Rust 1.63 或更高版本。它对 zlib-rs 有一个可选的依赖项,需要 1.75 或更高版本。
从 Rustls 0.22 开始,可以选择 Rustls 使用的加密原语的提供者。如果您有默认提供商aws-lc-rs
无法满足的特定平台、合规性或功能要求,这可能会很有吸引力。
希望自定义正在使用的提供程序的用户可以在各自的配置生成器类型上使用with_crypto_provider
方法构造ClientConfig
和ServerConfig
实例时这样做。有关更多详细信息,请参阅crypto::CryptoProvider
文档。
Rustls 附带了两个由相关功能标志控制的内置提供程序:
aws-lc-rs
- 默认启用,可在启用aws_lc_rs
功能标志时使用。ring
- 启用ring
功能标志后可用。有关如何选择提供程序的详细信息,请参阅crypto::CryptoProvider
的文档。
社区还开始为 Rustls 开发第三方提供商:
rustls-mbedtls-provider
- 使用mbedtls
进行加密的提供程序。boring-rustls-provider
- 一个正在开发的提供程序,使用boringssl
进行加密。rustls-rustcrypto
- 一个实验性提供程序,使用RustCrypto
中的加密原语进行加密。rustls-post-quantum
:一个实验性提供程序,为默认的 aws-lc-rs 提供程序添加了对后量子密钥交换的支持。rustls-wolfcrypt-provider
- 一个正在开发的提供程序,使用wolfCrypt
进行加密。 我们还在custom-provider
示例中提供了一个编写您自己的提供程序的简单示例。此示例使用RustCrypto
生态系统的一部分实现了一个最小的提供程序。
有关此主题的更多信息,请参阅文档的制作自定义 CryptoProvider 部分。
我们的示例目录包含演示如何使用stream::Stream
帮助程序处理 I/O,以及如何使用mio
处理更复杂的异步 I/O。如果您已经将 Tokio 用于异步运行时,您可能更喜欢使用tokio-rustls
而不是直接与 rustls 交互。
基于mio
的示例是最完整的,下面将对此进行讨论。 Rustls 的新用户可能更喜欢先查看简单的客户端/服务器示例,然后再深入研究更复杂的 MIO 示例。
MIO 客户端示例程序名为tlsclient-mio
。
一些示例运行:
$ cargo run --bin tlsclient-mio -- --http mozilla-modern.badssl.com
HTTP/1.1 200 OK
Server: nginx/1.6.2 (Ubuntu)
Date: Wed, 01 Jun 2016 18:44:00 GMT
Content-Type: text/html
Content-Length: 644
(...)
或者
$ cargo run --bin tlsclient-mio -- --http expired.badssl.com
TLS error: InvalidCertificate(Expired)
Connection closed
运行cargo run --bin tlsclient-mio -- --help
以获取更多选项。
MIO 服务器示例程序名为tlsserver-mio
。
这是一个示例运行;我们启动一个 TLS echo 服务器,然后使用openssl
和tlsclient-mio
连接到它:
$ cargo run --bin tlsserver-mio -- --certs test-ca/rsa-2048/end.fullchain --key test-ca/rsa-2048/end.key -p 8443 echo &
$ echo hello world | openssl s_client -ign_eof -quiet -connect localhost:8443
depth=2 CN = ponytown RSA CA
verify error:num=19:self signed certificate in certificate chain
hello world
^C
$ echo hello world | cargo run --bin tlsclient-mio -- --cafile test-ca/rsa-2048/ca.cert -p 8443 localhost
hello world
^C
运行cargo run --bin tlsserver-mio -- --help
以获取更多选项。
Rustls 根据以下三个许可证分发:
它们分别包含为 LICENSE-APACHE、LICENSE-MIT 和 LICENSE-ISC。您可以选择根据任何这些许可的条款使用本软件。
该项目采用 Rust 行为准则。如果您对行为准则有任何意见或疑问,请发送电子邮件至 [email protected] 举报任何不当行为。