使用 openssl 验证 pem 证书链

使用 openssl 验证 pem 证书链

我正在尝试编写一个代码,它接收一个pcap文件作为输入并从中返回无效的证书。

我已经解析了证书链,并尝试验证它们。因为我从pcap链长度不恒定的证书链中获取了证书链(有时它们仅包含 1 个自签名(且有效)的证书)。

设为cert0.pem服务器证书和certk.pem根 CA 证书。

根据我在线的研究,我尝试按如下方式验证证书:

  1. 创建一个certs.pem包含以下顺序的证书链的文件:
    certk.pem,,certk-1.pem......,cert0.pem

  2. 使用命令(ca.pem是包含根证书的文件):

    openssl verify -CAfile ca.pem certs.pem 
    

但有时即使是有效的证书,验证也会出错,如以下输出所示:

C = US, O = GeoTrust Inc., CN = GeoTrust Global CA <br>
error 20 at 0 depth lookup: unable to get local issuer certificate<br> 
error certs.pem: verification failed

请帮帮我,我该如何验证证书链?

此外,有没有办法在同一行添加主机名验证?(我试图添加“ -verify_hostname name”,但输出再次出乎意料)。

答案1

对于远程证书验证,您在此处提到的错误表明第一的你试图验证的链文件中的本地证书(深度 0),即certk.pem作为根 CA 证书必须存在/导入在您执行验证的本地客户端受信任证书存储中。

正如 thawte.com 所述支持站点

这是服务器发送的服务器证书的验证输出。服务器发送其完整的证书链,其中包含 2 个证书,一个(深度 0)是服务器证书“CN=www.yourdomain.com”,另一个是 CA 证书“CN=Thawte Server CA”。与所有根证书一样,此证书是自签名的。

为了避免此错误,您的客户端必须在其受信任的证书存储中(在 CAfile 或 CApath 中)拥有根 CA 证书的本地副本。

另外:请考虑使用-show_chain验证选项查看证书链中的更多详细信息和/或错误。请注意,在验证来自不受信任的 CA 的证书时,此错误行为是预期的,并且是默认行为。您可以在 openssl 中检查错误代码维基百科

相关内容