无法使用 OpenSSL 验证叶证书

问题描述 投票:0回答:1

我有三个证书应该组成一个有效的链:

  1. 根CA
  2. 中级CA
  3. 客户端证书(由中间CA签名)

我正在尝试使用 OpenSSL 来验证客户端证书实际上是由中间 CA/根 CA 签名的。

通过网上查找,我找到了以下命令:

openssl verify -CAfile root-ca.pem -untrusted Intermediate.pem ClientCert.pem

运行此命令返回:

ClientCert.pem: OK

通过阅读有关验证命令的文档,它说:

If a certificate is found which is its own issuer it is assumed to be the root CA.

它的工作方式是将我的中间体视为根 CA,并尝试使用中间体作为根证书来验证客户端证书,并验证中间体确实签署了客户端证书。这实际上使得包含

-CAfile root-ca.pem
毫无用处,因为它从未在验证中使用。 (我通过用随机的、不相关的 root-ca 替换 OpenSSL 命令中的
root-ca.pem
来测试这一点,它仍然返回该链是有效的,这对我来说似乎有点疯狂,因为这意味着该链实际上没有经过验证)

接下来,我尝试通过删除

-untrusted
选项并省略
Intermediate.pem
来验证我的证书。这导致了以下错误:

error 20 at 0 depth lookup: unable to get local issuer certificate
error ClientCert.pem: verification failed

我还尝试将客户端证书和中间证书捆绑在一起,但我的理解是 OpenSSL 只查看文件中的第一个证书。

以下命令也会返回 OK,即使提供的 CA 没有与中间体的连接:

openssl verify -CAfile some-random-ca.pem Intermediate.pem

如果客户端证书由中间体签名,是否无法仅使用根 ca 和客户端证书来验证该证书,并且无法验证根 ca 是否创建了中间体,然后签署了客户端证书?

ssl openssl
1个回答
0
投票

根据进一步调查,

-trusted
标志可用于提供根CA,让OpenSSL验证整个链:

openssl verify -trusted root-ca.pem -untrusted Intermediate.pem ClientCert.pem

-可信文件

受信任的证书文件,必须是自签名的,除非指定了 -partial_chain 选项。该文件包含一个或多个 PEM 格式的证书。使用此选项,不会咨询其他(例如默认)证书列表。也就是说,唯一的信任锚是文件中列出的那些。可以多次指定此选项以包含来自多个文件的可信证书。此选项意味着 -no-CAfile 和 -no-CApath 选项。此选项不能与 -CAfile 或 -CApath 选项结合使用。

使用

-trusted
选项,如果我现在提供了不正确的 CA(未创建中间版本),则 OpenSSL 会正确报告:

error 20 at 1 depth lookup: unable to get local issuer certificate
© www.soinside.com 2019 - 2024. All rights reserved.