【问题标题】:openssl verify - error 20 at 0 depth lookup:unable to get local issuer certificateopenssl 验证 - 0 深度查找时出现错误 20:无法获取本地颁发者证书
【发布时间】:2013-04-26 11:38:35
【问题描述】:

我从 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>

【问题讨论】:

  • 同样的问题,新证书颁发给我们并安装在 tomcat 服务器上。

标签: openssl certificate verify


【解决方案1】:

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 以构建有效链解决了"which directory" 问题。它在 PKI 中是一个众所周知的问题。本质上,客户(如我)不知道去哪里获取丢失的中间证书。

【讨论】:

  • 在自签名证书的情况下,自签名证书不就是CA证书和实体证书吗?
  • @WilburWhateley - 否。必须设置基本约束和CA:FALSECA:TRUE 无法设置。如果 CA 属性为真,则最终实体证书可以铸造其他证书。
  • 自签名不可能吗?不清楚。因为在这种情况下只有一个证书,对吧?因此,自签名不能是 CA,没有 CA,您无法验证...是否有我遗漏的东西,或者这通常是 SSL 的糟糕设计。
  • @WilburWhateley 我对使用 openssl 还很陌生,但据我收集的资料来看,openssl 默认不信任任何 CA,您必须指定要信任的 CA。此外,您可以使用 openssl (CA:TRUE) 自己创建 CA。因此,要获得自签名证书以验证您需要首先创建 CA 的证书和密钥,然后通过使用新创建的 CA 对其进行签名来创建“自签名”证书。此时,您现在可以使用您自己的 CA 验证您的自签名证书。至少这是我在过去 48 小时左右收集到的内容,并让它在本地工作。
【解决方案2】:

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

例子:

basicConstraints=CA:TRUE,pathlen:10 # Okay
basicConstraints=CA:FALSE,pathlen:10 # Invalid!

【讨论】:

  • 谢谢。我已经在墙上撞了大约一个小时,因为我在我的叶子证书上设置了 CA:FALSE, pathlen:0 ...证书创建正常,但 openssl verify 无法验证它。将简单更改为 CA:FALSE 即可生成可验证的证书
  • 你拯救了我的一天!
  • 这是正确答案。
【解决方案3】:

我在正确使用 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:这是经过验证的实际证书。

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

【讨论】:

    【解决方案4】:

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

    潜在问题 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 替代方案时可能会遇到此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-03
      • 2012-07-17
      • 2015-02-20
      • 2018-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多