内存安全的TLS实现-Rustls
Rustls 是一个用 Rust 编写的现代 TLS 库;它使用 ring 进行加密,使用 webpki 进行证书验证。Rustls 成熟且使用广泛。虽然大多数 API 是稳定的,但开发团队预计接下来的几个版本将根据需要进行进一步更改,以适应新功能或性能改进。
Rustls 旨在提供良好的加密安全级别,无需配置即可实现该安全性,并且不提供不安全的功能或过时的加密技术。采用了非常开放的Apach2.0/MIT/ISC的多协议授权。
OpenSSL is a ubiquitous TLS library, used in a large percentage of all devices connected to the Internet. Unfortunately, it's written in C and has a long history of memory safety vulnerabilities. Rustls is a high-quality TLS implementation written in Rust, a memory safe language.
特性
支持TLS1.2 和 TLS1.3。
客户端的 ECDSA、Ed25519 或 RSA 服务器身份验证。
通过服务器进行 ECDSA、Ed25519 或 RSA 服务器身份验证。
使用 ECDHE 的前向保密;使用 curve25519、nistp256 或 nistp384 曲线。
AES128-GCM 和 AES256-GCM 批量加密,具有安全随机数。
ChaCha20-Poly1305 批量加密 ( RFC7905 )。
ALPN与SNI 支持。
可调片段大小,使 TLS 消息匹配底层传输的大小。
可选地使用矢量 IO 来最小化系统调用。
TLS1.2 会话恢复。
通过 tickets 恢复 TLS1.2 (RFC5077 )。
TLS1.3 通过票据或会话存储恢复。
客户端的 TLS1.3 0-RTT 数据。
服务器的 TLS1.3 0-RTT 数据。
由客户端进行客户端身份验证。
服务器进行客户端身份验证。
扩展的主密钥支持 ( RFC7627 )。
Exporters (RFC5705)
OCSP 由服务器装订。
通过服务器进行 SCT 装订。
客户的 SCT 验证。
可期功能
支持 PSK。
客户端的 OCSP 验证。
Certificate pinning。
最新版本:0.21
0.21.0 已于2023年4月上旬发布,此版本有两个主要的新功能和许多其他改进。第一个重要特性是一项期待已久的功能 —— 支持包含 IP 地址的 TLS 证书。Rustls 现在可用于设置通过 IP 而不是域名寻址的 TLS 连接。这对于 Kubernetes pod 这样经常使用 IP 地址而不是域名的东西很有用;对于 HTTPS/TLS 上的 DNS 也很有用,它需要服务器的 IP 地址以避免对名称解析的循环依赖。第二大特性是支持 RFC8446 C.4 客户端跟踪预防。这意味着被动网络观察者将不再能够将连接与 ticket reuse 相关联。
此外公告还表示,Rustls 正收到来自 ISRG 的大力投资。“我们的目标是使 Rustls 成为需要 TLS 支持的软件中最具吸引力的选择。”目前Rustls开发团队正在根据 Prossimo 倡议内容推动项目工作的进行。其中最重要的优先事项之一是启用可插拔的加密后端,这项功能将使 Rustls 用户有可能在 Ring 或 SymCrypt 等加密后端中进行选择。“我们希望这种可选择性能够减少大型组织在转向内存安全选项时的摩擦。”下一个 Rustls 版本已经在积极开发当中。更多详情可查看官方公告。
项目主页:https://www.memorysafety.org/initiative/rustls/