36次发布
0.16.0 | 2024年2月29日 |
---|---|
0.15.1 | 2023年8月3日 |
0.15.0 | 2023年3月15日 |
0.14.0 | 2022年6月30日 |
0.1.0 | 2018年1月20日 |
#6 in 密码学
1,275,642 每月下载量
用于 1,046 个crate(144 个直接使用)
255KB
4.5K SLoC
X.509解析器
A X.509 v3 (RFC5280) 解析器,使用nom解析器组合器框架实现。
它完全用Rust编写,速度快,大量使用零拷贝技术。在设计和实现过程中,非常注重安全性,包括递归限制、防御性编程、测试和模糊测试。它还旨在避免恐慌。
证书通常以PEM(通常是最常见格式)或DER两种主要格式编码。PEM编码的证书是一个容器,存储DER对象。有关更多文档,请参阅pem
模块。
解析DER编码的证书的主要方法是使用X509Certificate::from_der
(FromDer
trait的一部分),它构建一个X509Certificate
对象。
另一种方法是使用X509CertificateParser
,它允许指定解析选项(例如,不自动解析选项内容)。
解析器返回的对象遵循RFC的定义。这意味着通过递归访问结构体成员来访问字段。提供了一些辅助函数,例如X509Certificate::issuer()
返回的结果与访问<object>.tbs_certificate.issuer
相同。
对于PEM编码的证书,使用pem
模块。
示例
解析DER格式的证书
use x509_parser::prelude::*;
static IGCA_DER: &[u8] = include_bytes!("../assets/IGC_A.der");
let res = X509Certificate::from_der(IGCA_DER);
match res {
Ok((rem, cert)) => {
assert!(rem.is_empty());
//
assert_eq!(cert.version(), X509Version::V3);
},
_ => panic!("x509 parsing failed: {:?}", res),
}
解析CRL并打印被撤销证书的信息
#
#
let res = CertificateRevocationList::from_der(DER);
match res {
Ok((_rem, crl)) => {
for revoked in crl.iter_revoked_certificates() {
println!("Revoked certificate serial: {}", revoked.raw_serial_as_string());
println!(" Reason: {}", revoked.reason_code().unwrap_or_default().1);
}
},
_ => panic!("CRL parsing failed: {:?}", res),
}
参见examples/print-cert.rs
。
特性
- 添加了
verify
特性,支持基于ring
的签名验证。它将X509Certificate::verify_signature()
方法添加到X509Certificate
。
/// Cryptographic signature verification: returns true if certificate was signed by issuer
#[cfg(feature = "verify")]
pub fn check_signature(cert: &X509Certificate<'_>, issuer: &X509Certificate<'_>) -> bool {
let issuer_public_key = issuer.public_key();
cert
.verify_signature(Some(issuer_public_key))
.is_ok()
}
- 添加了
validate
特性,使用Validate
特质在证书结构和值上运行更多验证函数。它不会验证任何加密参数(见上文的verify
)。
Rust版本要求
x509-parser
需要Rustc版本1.63或更高,基于der-parser依赖和proc-macro属性支持。
注意,由于time
crate的破坏性变更,对于≤1.63的编译器版本,必须指定此crate的特定版本:cargo update -p time --precise 0.3.20
变更
许可证
根据您的选择,许可协议为以下之一
- Apache License, Version 2.0 (LICENSE-APACHE或http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT或http://opensource.org/licenses/MIT)
。
贡献
除非您明确说明,否则任何有意提交给您的工作并由Apache-2.0许可证定义的贡献,将根据上述协议双许可,不附加任何额外条款或条件。
依赖项
~3–12MB
~157K SLoC