跳到主要内容

Crate rustls_pki_types

搜索

Crate rustls_pki_types 

Source
展开描述

本 crate 提供用于表示 X.509 证书、密钥及其他在 rustls 生态中常用的类型。它面向那些需要处理这些 X.509 类型的 crate, 例如 rustlsrustls-webpki 等。

这些 crate 中有一些原本围绕 DER 编码字节定义了自己的简单包装类型。 然而,为了避免产生不便的依赖关系,所有这些包装类型都已被解耦。 通过使用一个长期 API 稳定的公共底层 crate,我们希望在避免不必要依赖关系弊病的同时,为各 crate 之间提供良好的互操作性。

§

本 crate 中定义的许多类型都表示 DER 编码数据。DER 是 ASN.1 格式的二进制编码,在 Web PKI 规范中被广泛使用。 作为一种二进制格式,它在内存中存储时相当紧凑。 但由于是二进制格式,对人类阅读以及在不便处理二进制的场景中使用并不友好。 因此,许多工具和协议采用一种称为 PEM 的基于 ASCII 的 DER 编码方式。 除了 base64 编码的 DER 之外,PEM 对象还通过头部和尾部行定界,标明该 PEM 数据块中所包含对象的类型。

这些类型可通过以下方式创建:

pem::PemObject 特性提供了从 PEM 编码构造这些类型的完整方式。 包括从文件、字节切片,或从 std::io 流中读取并构造。

还提供了一个更底层的 API,可一次性完整消费给定的 PEM 文件, 即使其中包含不同的数据类型:见 pem::PemObject 特性在 (pem::SectionKind, Vec<u8>) 元组上的实现。

§

本 crate 不提供创建新证书或密钥的功能。不过,可以使用 rcgen crate 来创建新的证书和密钥。

§

本 crate 故意为私钥类型实现 Clone, 以最大程度地减少私钥数据在内存中的暴露。

若希望延长 PrivateKeyDer<'_> 的生命周期,可考虑使用 PrivateKeyDer::clone_key()。 另外,由于这些类型是不可变的,也可以考虑将 PrivateKeyDer<'_> 包装在 RcArc 中。

§Target wasm32-unknown-unknown with the web feature

std::time::SystemTimewasm32-unknown-unknown 目标中不可用, 因此对 UnixTime::now() 的调用——通常由 std feature 启用—— 需要改为启用 web feature 后再编译。 该实现通过在浏览器中调用 Date.now() 来获取时间。

再导出§

pub use alg_id::AlgorithmIdentifier;

模块§

alg_id
PKIX AlgorithmIdentifier 类型及其常用取值。
pem
底层 PEM 解码 API。

结构体§

AddrParseError
解析 IP 地址失败
CertificateDer
DER 编码的 X.509 证书;按 RFC 5280 规定
CertificateRevocationListDer
一个证书吊销列表(CRL),如 RFC 5280 所规定
CertificateSigningRequestDer
一个证书签名请求(CSR),如 RFC 2986 所规定
Der
DER 编码的数据,可以是 owned 或 borrowed
DnsName
一个封装字符串(借用或拥有)的类型,其内容在语法上是合法的 DNS 名。
EchConfigListBytes
TLS 编码的 Encrypted Client Hello (ECH) 配置列表(ECHConfigList);按 RFC 9849 §4 规定
InvalidDnsNameError
提供的输入无法解析,因为它不是语法上合法的 DNS 名。
InvalidSignature
签名无效时返回的、无详细信息的错误。
Ipv4Addr
no_std 实现的 std::net::Ipv4Addr。
Ipv6Addr
no_std 实现的 std::net::Ipv6Addr。
PrivatePkcs1KeyDer
DER 编码的明文 RSA 私钥;按 PKCS#1/RFC 3447 规定
PrivatePkcs8KeyDer
DER 编码的明文私钥;按 PKCS#8/RFC 5958 规定
PrivateSec1KeyDer
一个 Sec1 编码的明文私钥,如 RFC 5915 所规定
SubjectPublicKeyInfoDer
DER 编码的 SubjectPublicKeyInfo (SPKI),按 RFC 5280 规定。
TrustAnchor
一个信任锚(即根 CA)
UnixTime
一个时间戳,记录自 Unix 纪元以来的非闰秒数。

枚举§

FipsStatus
算法或实现的 FIPS 验证状态。
IpAddr
no_std 实现的 std::net::IpAddr。
PrivateKeyDer
DER 编码的 X.509 私钥,格式为其中之一
ServerName
编码客户端可以知道服务端预期名称的方式。

特性§

SignatureVerificationAlgorithm
一个抽象的签名验证算法。

类型别名§

SubjectPublicKeyInfoDeprecated
DER 编码的 SubjectPublicKeyInfo (SPKI),按 RFC 5280 规定。