#ber-der #pki #x509

x509-certificate

X.509证书解析和实用功能

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密码学

Download history 17331/week @ 2024-04-08 18160/week @ 2024-04-15 22102/week @ 2024-04-22 24489/week @ 2024-04-29 20428/week @ 2024-05-06 34561/week @ 2024-05-13 33653/week @ 2024-05-20 42440/week @ 2024-05-27 53894/week @ 2024-06-03 39948/week @ 2024-06-10 31821/week @ 2024-06-17 27522/week @ 2024-06-24 23563/week @ 2024-07-01 51246/week @ 2024-07-08 61702/week @ 2024-07-15 54502/week @ 2024-07-22

192,404 每月下载量
61 个crate(29直接) 中使用

MPL-2.0 许可证

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-certificatecargo 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