You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rustls_pki_types读取私钥文件触发NoItemsFound错误

问题原因与解决办法

核心问题

你用OpenSSL生成私钥时没加-nodes参数,生成的是加密的PKCS#8格式私钥,而rustls_pki_types的各类私钥读取方法(包括PrivateKeyDer/PrivatePkcs1Der/PrivatePkcs8Der的from_pem_file)默认不支持读取加密的PEM私钥,因此触发NoItemsFound错误。

Python代码能正常用是因为多数Python TLS库(比如标准库ssl)会自动处理加密私钥的密码输入逻辑,但rustls_pki_types没有这个默认处理流程。

两种解决路径

路径1:重新生成未加密私钥

修改OpenSSL命令,添加-nodes参数(表示不加密私钥),同时修正subjectAltName的格式错误(原命令里的IP.XX.XX.XX.XX是无效格式,需改成IP:XX.XX.XX.XX):

openssl req -newkey rsa:4096 -nodes -subj "/C=XX/ST=XX/L=XX/O=XX/CN=XX" -addext "subjectAltName = IP:XX.XX.XX.XX" -outform pem -keyout C:\filepath\serverPrivate.pem -out C:\filepath\serverRequest.pem

路径2:解密现有加密私钥

如果不想重新生成,用OpenSSL把现有加密私钥转成未加密版本:

openssl rsa -in C:\filepath\serverPrivate.pem -out C:\filepath\serverPrivate_unencrypted.pem

执行时输入你生成私钥时设置的密码,就能得到未加密的PEM私钥,替换原文件路径即可正常读取。

代码优化建议(可选)

不要用unwrap()直接忽略错误,改成显式错误处理,方便排查问题:

fn read_certs_from_file() -> Result<(Vec<CertificateDer<'static>>, PrivateKeyDer<'static>), Box<dyn Error>> {
    let certs = CertificateDer::pem_file_iter("./src/serverChain.pem")?
        .collect::<Result<_, _>>()?;
    let key = PrivateKeyDer::from_pem_file("./src/serverPrivate.pem")?;
    Ok((certs, key))
}

内容的提问来源于stack exchange,提问作者mwolfe 11

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 06:33:15