37

我从 PFX 证书创建了 PEM 证书并想验证它。但是我遇到了这个问题,试图找到一些答案,但我没有,因此我不知道如何解决它。你能请教吗?非常感谢您。

C:\OpenSSL-Win32\bin>set OPENSSL_CONF=C:\OpenSSL-Win32\bin\openssl.cfg

C:\OpenSSL-Win32\bin>openssl
OpenSSL> verify C:\mycert.pem
C:\mycert.pem: C = CZ, ST = Sprava zakladnich registru, L = "Obec=Praha,Ulice=Na Vapence,PSC=13000", O = 72054506, OU = 4333, CN = tstcawilly.szr.local
error 20 at 0 depth lookup:unable to get local issuer certificate
error in verify
OpenSSL>
OpenSSL> verify -CAfile C:\mycert.pem C:\mycert.pem
C:\mycert.pem: C = CZ, ST = Sprava zakladnich registru, L = "Obec=Praha,Ulice=Na Vapence,PSC=13000", O = 72054506, OU = 4333, CN = tstcawilly.szr.local
error 20 at 0 depth lookup:unable to get local issuer certificate
error in verify
OpenSSL>
4

4 回答 4

27

OpenSSL> 验证 -CAfile C:\mycert.pem C:\mycert.pem

关。您需要使用-CAfile;添加 CA 的根证书 而不是您的最终实体证书。就像是:

openssl verify -CAfile C:\ca-cert.pem C:\mycert.pem

此外,如果有中间证书,则需要将其添加到mycert.pem. 所以mycert.pem实际上会有两个(或更多)证书(而不是一个)。

添加所有必需的证书以mycert.pem构建有效链解决了“哪个目录”问题。它在 PKI 中是一个众所周知的问题。本质上,客户(像我一样)不知道去哪里获取丢失的中间证书。

于 2014-04-21T04:26:21.713 回答
3

另一种情况是pathlen只能在 中CA:TRUE设置basicConstraints

例子:

basicConstraints=CA:TRUE,pathlen:10 # Okay
basicConstraints=CA:FALSE,pathlen:10 # Invalid!
于 2020-05-26T13:50:12.877 回答
0

我发现了您可能面临的两个潜在问题。

潜在问题 1. 中间证书可能会给您带来问题。

在针对多个中间证书验证我们的新 QSeal 证书(PEM 格式)时,我为每个中间证书使用了选项 -untrusted。以下是 MacOS / Linux 上的示例。

openssl verify -verbose -CAfile ./quovadis_root_ca1g3.pem -untrusted ./quovadis_quovadisenterprisetrustca1g3.pem -untrusted ./quovadis_quovadiseuissuingcertificationauthorityg4.pem ./qseal_new.crt

现在是输出

./qseal_new.crt: OK

潜在问题 2。 即使在修复中间证书问题时,我也会在使用 LibreSSL 时保留这个问题。切换到 OpenSSL 解决了它。我知道您使用的是 Windows,但其他人在使用 OpenSSL 替代方案时可能会遇到此问题。

于 2021-09-09T10:33:51.547 回答
0

我在正确使用 openssl verify 命令时也遇到了问题。所以我也得到了错误:“在 0 深度查找时出现错误 20:无法获取本地颁发者证书”

如果您的证书链包含多个中间证书(超过 2 个证书),以下是如何正确使用 openssl verify 命令的简短说明。

假设我们有以下证书链: my_root_ca.crt > my_intermediate_ca1.crt > my_intermediate_ca2.crt > leaf_cert.crt

openssl verify -CAfile my_root_ca.crt -untrusted all_my_intermediate_ca.crt leaf_cert.crt

my_root_ca.crt:这是根证书(自签名)

all_my_intermediate_ca.crt:此文件必须包含两个中间证书(my_intermediate_ca1.crt 和 my_intermediate_ca2.crt)

leaf_cert.crt:这是经过验证的实际证书。

因此,如果您拥有两个以上的中间证书,这也将起作用。但是您必须将它们全部包含在一个文件中。

于 2021-09-09T10:08:29.947 回答