rustls/rustls
GitHub: rustls/rustls
用 Rust 编写的现代 TLS 库,提供安全的 TLS 1.2/1.3 实现,支持可插拔的密码学后端。
Stars: 7291 | Forks: 800
Rustls 是一个用 Rust 编写的现代 TLS 库。
# 状态 Rustls 已被许多组织和项目用于生产环境。我们致力于保持合理的 API 表面稳定性,但为了适应新功能或性能改进,API 可能会随之演变。 我们制定了未来计划的 [路线图](ROADMAP.md)。我们还提供了 [基准测试](BENCHMARKING.md) 以防止性能退化,并让您能在目标硬件上评估 rustls。 如果您愿意提供帮助,请参阅 [CONTRIBUTING.md](CONTRIBUTING.md)。 [](https://github.com/rustls/rustls/actions/workflows/build.yml?query=branch%3Amain) [](https://codecov.io/gh/rustls/rustls/) [](https://docs.rs/rustls/) [](https://discord.gg/MCSB76RU96) [](https://www.bestpractices.dev/projects/9034) 维护者将 "rustls" 读作 rustles(而不是 rust-TLS),但我们对此并不强求。 ## 更新日志 每个版本的详细更改列表可以在 https://github.com/rustls/rustls/releases 找到。 # 文档 https://docs.rs/rustls/ # 设计理念 Rustls 是一个 TLS 库,旨在提供良好的密码学安全级别,无需配置即可实现该安全性,且默认不提供不安全的功能或过时的密码学算法。 Rustls 为客户端和服务器实现了 TLS1.2 和 TLS1.3。请参阅 [协议功能完整列表](https://docs.rs/rustls/latest/rustls/manual/_04_features/index.html)。 ### 平台支持 虽然 Rustls 本身是平台无关的,但它需要使用密码学原语来实现 TLS 中使用的密码学算法。在 Rustls 中,[`crypto::CryptoProvider`] 代表一组密码原语实现。 通过提供 [`crypto::CryptoProvider`] 结构体的自定义实例,您可以替换 rustls 的所有密码学依赖。这是移植到更广泛的架构和环境或满足合规性要求的一种途径。请参阅 [`crypto::CryptoProvider`] 文档以获取更多详细信息。 Rustls 需要 Rust 1.83 或更高版本。 ### 密码学提供者 自 Rustls 0.22 起,已经可以选择 Rustls 使用的密码学原语的提供者。如果您有特定的平台、合规性或功能要求,这可能很有吸引力。 从 0.24 版本开始,用户在构造 `ClientConfig` 或 `ServerConfig` 实例时必须显式提供 crypto provider。请参阅 [`crypto::CryptoProvider`] 文档以获取更多详细信息。 #### 官方提供者 Rustls 项目目前维护两个密码学提供者: * [`rustls-aws-lc-rs`] - 使用 [`aws-lc-rs`] crate 进行密码学运算的提供者。 虽然此提供者在 [某些平台][aws-lc-rs-platforms-faq] 上可能较难构建,但它提供了卓越的性能和完整的功能集(包括后量子算法)。 * [`rustls-ring`] - 使用 [`ring`] crate 进行密码学运算的提供者。此提供者更容易在各种平台上构建,但功能集较有限(例如,不支持后量子算法)。 Rustls 团队推荐使用 [`rustls-aws-lc-rs`] crate,因为它具有完整的功能集和性能。请参阅 [aws-lc-rs FAQ][aws-lc-rs-platforms-faq] 以了解 aws-lc-rs 中平台/架构支持约束的更多详细信息。 请参阅 [`crypto::CryptoProvider`] 的文档以获取有关如何选择提供者的详细信息。 (对于 0.24 之前的 rustls 版本,这两个提供者都作为 rustls crate 的一部分提供,并使用 Cargo features 来选择首选提供者。默认启用 `aws-lc-rs` feature。) #### 第三方提供者 社区也开始为 Rustls 开发第三方提供者: * [`boring-rustls-provider`] - 一个正在开发中的提供者,使用 [`boringssl`] 进行密码学运算。 * [`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] 进行密码学运算的提供者。 * [`rustls-rustcrypto`] - 一个实验性提供者,使用 [`RustCrypto`] 中的密码原语进行密码学运算。 * [`rustls-symcrypt`] - 使用 Microsoft [SymCrypt] 库的提供者。 * [`rustls-wolfcrypt-provider`] - 一个正在开发中的提供者,使用 [`wolfCrypt`] 进行密码学运算。 #### 自定义提供者 我们还在 [自定义提供者示例][custom provider example] 中提供了一个编写自定义提供者的简单示例。 该示例使用 [`RustCrypto`] 生态系统中的部分组件实现了一个最小化的提供者。 请参阅文档中的 [制作自定义 CryptoProvider][Making a custom CryptoProvider] 章节以获取关于此主题的更多信息。 # 示例代码 我们的 [examples] 目录包含演示如何使用 [`stream::Stream`] 辅助工具处理 I/O 的示例,以及使用 [`mio`] 进行更复杂的异步 I/O 的示例。 如果您已经在使用 Tokio 作为异步运行时,您可能更愿意使用 [`tokio-rustls`] 而不是直接与 rustls 交互。 基于 [`mio`] 的示例最为完整,并在下文进行了讨论。Rustls 新用户可能更愿意先看看简单的 client/server 示例,然后再深入研究更复杂的 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 --port 8443 localhost hello world ^C ``` 运行 `cargo run --bin tlsserver-mio -- --help` 获取更多选项。 # 许可证 Rustls 根据以下三个许可证分发: - Apache License version 2.0. - MIT license. - ISC license. 这些许可证分别包含在 LICENSE-APACHE、LICENSE-MIT 和 LICENSE-ISC 文件中。您可以选择在这些许可证的任意一个条款下使用本软件。 # 项目成员 - Joe Birr-Pixton ([@ctz], 项目创始人 - 由 [Prossimo] 全职资助) - Dirkjan Ochtman ([@djc], 联合维护者) - Daniel McCarney ([@cpu], 联合维护者) - Josh Aas ([@bdaehlie], 项目管理) # 行为准则 本项目采用 [Rust 行为准则](https://www.rust-lang.org/policies/code-of-conduct)。 如遇任何不当行为,或对行为准则有任何意见或疑问,请发送邮件至 rustls-mod@googlegroups.com。标签:DNS解析, HTTPS, JSONLines, Rust, SSL, TLS 1.2, TLS 1.3, TLS库, Web PKI, 云安全监控, 传输层安全, 内存安全, 加密, 可视化界面, 安全通信, 密码学, 开源项目, 手动系统调用, 漏洞扫描器, 系统编程, 网络安全, 网络安全库, 网络流量审计, 证书管理, 通知系统, 隐私保护, 零信任, 静态分析