Rustls 是一个用 Rust 编写的现代 TLS 库。
Rustls 已被许多组织和项目在生产环境中使用。我们力求保持合理的 API 表面稳定性,但随着我们为支持新功能或性能改进而做出变更,API 仍可能持续演进。
我们在路线图中列出了未来计划。我们还提供基准测试,以防止性能回退,并让你在目标硬件上评估 rustls。
如果你愿意提供帮助,请参阅 CONTRIBUTING.md。
维护者将 "rustls" 读作 rustles(而非 rust-TLS),但我们对此并无强烈意见。
每个版本中详细的变更列表可在 https://github.com/rustls/rustls/releases 查看。
Rustls 是一个 TLS 库,旨在提供良好的密码学安全水平,无需任何配置即可实现该安全性,并且默认不提供任何不安全的功能或过时的密码学算法。
Rustls 同时为客户端和服务器实现 TLS1.2 与 TLS1.3。请参阅完整的功能特性列表。
虽然 Rustls 本身是平台无关的,但它需要使用密码学原语来实现 TLS 中所用的密码学算法。在 Rustls 中,crypto::CryptoProvider 表示一组密码学原语实现的集合。
通过提供自定义的 crypto::CryptoProvider 结构体实例,你可以替换 rustls 的全部密码学依赖。这是让 rustls 可移植到更广泛的架构与环境,或满足合规要求的途径。更多详情请参阅 crypto::CryptoProvider 文档。
自 Rustls 0.22 起,用户可以选择 Rustls 所使用的密码学原语提供方。如果你有特定的平台、合规或功能要求,这可能会很有吸引力。
从 0.24 开始,用户在构造 ClientConfig 或 ServerConfig 实例时必须显式地提供密码学提供方。更多详情请参阅 crypto::CryptoProvider 文档。
Rustls 项目目前维护两个密码学提供方:
rustls-aws-lc-rs - 使用 aws-lc-rs crate 进行密码学运算的提供方。虽然该提供方在某些平台上构建起来可能更困难,但它提供了卓越的性能和完整的功能集(包括后量子算法)。rustls-ring - 使用 ring crate 进行密码学运算的提供方。该提供方在各种平台上更容易构建,但功能集较为有限(例如,它不支持后量子算法)。Rustls 团队建议使用 rustls-aws-lc-rs crate,因为它功能完整且性能出色。有关 aws-lc-rs 在平台/架构支持方面的更多限制详情,请参阅 aws-lc-rs 常见问题。
有关提供方如何被选择的详情,请参阅 crypto::CryptoProvider 文档。
(对于 0.24 之前的 rustls 版本,这两个提供方都随 rustls crate 一起发布,并通过 Cargo 特性来选择首选提供方。aws-lc-rs 特性在默认情况下是启用的。)
社区也已开始为 Rustls 开发第三方提供方:
boring-rustls-provider - 一个使用 boringssl 进行密码学运算的进行中(work-in-progress)提供方。rustls-ccm - 使用 RustCrypto 添加 AES-CCM 密码套件(TLS 1.2 和 1.3),面向 IoT/受限设备协议(IEEE 2030.5、Matter、RFC 7925)。rustls-graviola - 一个使用 graviola 进行密码学运算的提供方。rustls-mbedtls-provider - 一个使用 mbedtls 进行密码学运算的提供方。rustls-openssl - 一个使用 OpenSSL 进行密码学运算的提供方。有关此主题的更多信息,请参阅文档中的 Making a custom CryptoProvider 部分。
我们的 examples 目录包含演示如何使用 stream::Stream 辅助工具处理 I/O 的示例,以及使用 mio 的更复杂的异步 I/O 示例。如果你已经在使用 Tokio 作为异步运行时,你可能会更倾向于使用 tokio-rustls 而不是直接与 rustls 交互。
基于 mio 的示例最为完整,下文将予以讨论。Rustls 的新用户可能更倾向于先查看简单的客户端/服务器示例,然后再深入更复杂的 MIO 示例。
MIO 客户端示例程序名为 tlsclient-mio。
一些示例运行:
$ cargo run --bin tlsclient-mio -- --http jbp.io
HTTP/1.1 200 OK
Date: Tue, 23 Jun 2026 16:13:40 GMT
Content-Type: text/html; charset=utf-8
Connection: close
(...)
运行 cargo run --bin tlsclient-mio -- --help 以获取更多选项。
MIO 服务器示例程序名为 tlsserver-mio。
以下是一个示例运行;我们启动一个 TLS 回显服务器,然后使用 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 --port 8443 localhost
hello world
^C
运行 cargo run --bin tlsserver-mio -- --help 以获取更多选项。
Rustls 在以下三种许可证下分发:
这些分别包含在 LICENSE-APACHE、LICENSE-MIT 和 LICENSE-ISC 中。你可以根据自己的选择,在任一许可证的条款下使用本软件。
本项目采用 Rust 行为准则。如要举报任何不当行为,或对行为准则有任何意见或疑问,请发送电子邮件至 [email protected]。
rustls-rustcryptorustls-symcrypt - 一个使用 Microsoft SymCrypt 库的提供方。rustls-wolfcrypt-provider - 一个使用 wolfCrypt 进行密码学运算的进行中(work-in-progress)提供方。