PEM_read_X509
函数是否可以正确读取带有私钥的 CA 证书文件? 它是否足够智能来处理私钥部分?或者如果.pem
文件包含私钥,它会出错?
TLDR: 是
几乎所有 OpenSSLPEM_read[_bio]_XYZ
函数都将接受包含 XYZ 类型PEM块之前和/或之后的其他数据的文件(或等效文件(,并忽略其他数据,只要它不在同一行上。这旨在允许描述 PEM 数据的"注释",但也适用于其他类型的PEM 数据或仅与 PEM 数据完全无关的任意数据。特别是PEM_read_X509
将读取 CERTIFICATE、X509 证书或受信任证书类型的第一个块,并忽略其他任何内容,包括私钥块。
类似地,PEM_read_[algo_or_PKCS8]PrivateKey
将读取类型为 [ENCRYPTED|RSA|每日生活津贴|EC] 私钥并忽略其他所有内容,但如果您尝试读取特定算法并且找到的(第一个(私钥块是另一种类型,则会失败。(当然,如果找到有效块但由密码加密,并且您没有提供正确的密码作为参数或通过回调,它也会失败。如果未找到有效的块。
我不确定"CA 证书"是指 CA 的证书,还是 CA颁发的证书以及您的 Web 服务器或邮箱等最终实体的证书。除了您或同事或您的组织设置的个人/本地或测试 CA 之外,大多数普通用户应拥有一个或多个 CA 的证书,但绝不应拥有其私钥。如果一个真正的CA负责人,比如说LetsEncrypt在Stackoverflow上问这些基本问题,我会非常震惊和担心该CA的能力和安全性。