gpt4 book ai didi

node.js - SELF_SIGNED_CERT_IN_CHAIN 和 DEPTH_ZERO_SELF_SIGNED_CERT 有什么区别

转载 作者:太空宇宙 更新时间:2023-11-03 13:58:44 27 4
gpt4 key购买 nike

我在同一服务器-客户端微服务的两个不同安装上遇到了两个不同的错误。这些是在不同主机上运行的基于 Node.js 的服务。是的,我使用的是自签名证书。根据在线搜索,我可以在 https.agent 选项 中使用 rejectUnauthorized: false 绕过这些错误,或者将 NODE_TLS_REJECT_UNAUTHORIZED=0 设置为 ENVIRONMENT 变量客户端。我不想那样做,主要是因为这违背了 TLS 和 HTTPS 的全部目的。因此,我将签名证书传递给了客户,现在一切正常。至少,在我的一个安装实例中,它给出了 DEPTH_ZERO_SELF_SIGNED_CERT。我无法测试提供 SELF_SIGNED_CERT_IN_CHAIN(后勤问题)的另一个实例。我想知道,这两个错误有什么区别?一些在线博客和论坛将这两个错误视为同义词,并为两者提供类似的修复。

最佳答案

两个错误字符串都来自 OpenSSL。

所以如果你看https://www.openssl.org/docs/manmaster/man1/openssl-verify.html你得到:

X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN

The certificate chain could be built up using the untrusted certificates but the root could not be found locally.

X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT

The passed certificate is self-signed and the same certificate cannot be found in the list of trusted certificates.

因此它们在技术上是不同的,但在这两种情况下,这意味着在证书链中(自签名时的证书本身或链中更高的证书)其中一个在本地不受信任/找不到值得信赖。

这基本上意味着您没有使用您期望使用的证书,或者您的信任库没有相应配置。

openssl验证详情

创建一个自签名证书并在上面运行openssl verify,你会得到:

$ openssl verify -verbose cert.pem
cert.pem: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd
error 18 at 0 depth lookup:self signed certificate
OK

如果你查看它的联机帮助页,你会得到:

   18 X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: self signed certificate

所以错误 18DEPTH_ZERO_SELF_SIGNED_CERT

现在创建另一个证书 (cert2.pem),它将由这个自签名证书签名。

不通过不受信任的部分:

$ openssl verify -verbose cert2.pem
cert2.pem: C = US, ST = Some-State, O = Internet Widgits Pty Ltd
error 20 at 0 depth lookup:unable to get local issuer certificate

错误 20X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY。正如预期的那样,openssl 告诉您该证书不是自签名的,而是由它在本地不知道的授权机构签名的。

但是通过将先前的自签名证书作为第二个证书的 CA 传递:

$ openssl verify -verbose -untrusted cert.pem cert2.pem
cert2.pem: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd
error 19 at 1 depth lookup:self signed certificate in certificate chain

错误 19 确实是 X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:openssl 告诉您它可以根据不受信任的(即通常是 cert.pem 中的中间)证书(因此两者之间存在有效签名)但是该中间证书是自签名的并且不被称为受信任的 CA,因此基于您当前的信任库, openssl 无法完全验证此证书。

关于node.js - SELF_SIGNED_CERT_IN_CHAIN 和 DEPTH_ZERO_SELF_SIGNED_CERT 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57154131/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com