22次重大发布
0.23.1 | 2023年11月16日 |
---|---|
0.22.1 | 2023年11月5日 |
0.21.0 | 2023年7月24日 |
0.19.0 | 2023年3月19日 |
0.2.0 | 2021年5月6日 |
#64 在 密码学 中
192,404 每月下载量
在 61 个crate(29直接) 中使用
200KB
4K SLoC
x509-certificate
x509-certificate
是一个用于与X.509证书交互的库crate。它支持以下功能:
- 从BER、DER和PEM解析证书。
- 将证书序列化为BER、DER和PEM。
- 定义常见算法标识符。
- 生成新的证书。
- 验证证书上的签名。
- 等等。
此crate未经过安全审计。在解析证书时,它对格式不正确的数据没有实施许多保护。请自行承担风险。请参阅src/lib.rs
中的附加说明。
开发
仓库的根目录是一个Cargo工作空间,包含许多成员。整个仓库的依赖关系树非常庞大,并且cargo build
可能会因为Python依赖关系的问题而失败。
为了获得最佳结果,请cd x509-certificate
并在此处运行命令。或者cargo build -p x509-certificate
,cargo test -p x509-certificate
等。
lib.rs
:
与X.509证书交互。
此crate提供了一个与X.509证书交互的接口。
定义低级ASN.1原语的是具有定义它们所在RFC名称的模块。
大多数最终用户希望使用的更高级的原语定义在子模块中,但导出自主crate。
特性
- 从BER、DER和PEM解析X.509证书。
- 访问和操作定义证书的低级ASN.1数据结构。有关主X.509证书类型的详细信息,请参阅rfc5280::Certificate。
- 将X.509证书序列化为BER、DER和PEM。
- 用于与rfc3280::Name类型交互的高级API,这些类型定义了主题和发行者字段,但具有非常难以处理的数据结构。
- 定义在 X.509 证书中的关键算法 [KeyAlgorithm]、签名算法 [SignatureAlgorithm] 和摘要算法 [DigestAlgorithm] 的 Rust 枚举。这些枚举可以转换为/从 OID 转换,以及它们各自在 X.509 证书中表达的 ASN.1 类型。
- 证书中加密签名的验证。如果您有一个解析后的 X.509 证书和一个公钥(该公钥嵌入在发行证书中),我们可以告诉您该证书是否由该密钥/证书签名。
- 使用易于使用的构建器类型生成新的 X.509 证书。请参阅 [X509CertificateBuilder]。
安全免责声明
此软件包尚未由安全专家审核。它可能包含严重的错误。在某些安全敏感的环境中不建议使用。
特别是,ASN.1 解析器没有针对恶意输入进行加固。在解析代码中还有一些 ASN.1 类型会导致 panic。
已知问题
该代码最初是作为 [cryptographic-message-syntax] 软件包的一部分开发的,该软件包旨在支持使用纯 Rust 实现 Apple 代码签名。在多个软件包中重新发明 X.509 证书处理逻辑后,决定创建此软件包作为管理 X.509 证书的统一接口。虽然已尝试使 API 在独立环境中有用,但此软件包的设计中可能存在一些意图的历史遗留问题。欢迎接受改进该问题的 PR!
并非所有 ASN.1 类型都已实现。您可能会在一些不太经过测试的代码路径上遇到 panic。欢迎提供改进情况的补丁!
我们正在使用 bcder 软件包进行 ASN.1。首选 yasna 软件包的使用,因为它似乎更受欢迎。然而,作者最初无法让 yasna 与 RFC 5652 ASN.1 一起工作。然而,这可能是由于当时他对 ASN.1 的知识不足。将来可能将其移植到 yasna(或任何其他 ASN.1 解析器)。
由于此软件包的历史,许多测试覆盖其功能存在于其他地方的存储库中。总体测试覆盖率也可能得到改进。例如,我们没有针对 X.509 证书的模糊测试或测试语料库。
依赖项
~8–17MB
~306K SLoC