Openssl:错误“证书链中的自签名证书”
Posted
技术标签:
【中文标题】Openssl:错误“证书链中的自签名证书”【英文标题】:Openssl : error "self signed certificate in certificate chain" 【发布时间】:2012-08-24 05:13:43 【问题描述】:当我使用 openssl API 验证服务器证书(自签名)时,出现以下错误:
1 深度查找时出现错误 19:证书中的自签名证书 链
根据openssl documentation,这个错误(19)是
"X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:自签名证书在 证书链 - 证书链可以使用 不受信任的证书,但在本地找不到根。”
为什么会出现这个错误?我的服务器证书有问题吗?
【问题讨论】:
【参考方案1】:您有一个自签名的证书,因此默认情况下它是不受信任的,这就是 OpenSSL 抱怨的原因。这个警告实际上是一件好事,因为这种情况也可能由于man-in-the-middle attack 而上升。
要解决此问题,您需要将其安装为受信任的服务器。如果它是由不受信任的 CA 签名的,您还必须安装该 CA 的证书。
看看this link关于安装自签名证书。
【讨论】:
【参考方案2】:这里是验证要由特定 CA 签署的证书的单行代码:
openssl verify -verbose -x509_strict -CAfile ca.pem certificate.pem
这不需要在任何地方安装 CA。
有关详细信息和正确的证书链处理,请参阅How does an SSL certificate chain bundle work?。
【讨论】:
【参考方案3】:错误的解决方法是在代码的最前面添加这一行:
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
【讨论】:
我认为这是一种解决方法或测试选项。它不应该是持久的,因为它破坏了可用的安全性。 如果我没记错的话,这似乎是 Node.js 特有的。 它是 NodeJS 特定的,只是禁用所有证书检查。你可以这样做,但前提是你真的知道你在做什么。只是把它放在这里作为答案是不好的,因为任何使用它的人都不会得到任何关于他们在做什么的信息。 这不是解决方案。 -10【参考方案4】:如果您正在运行 Charles 并尝试构建 docker 容器,那么您很可能会收到此错误。
确保在 proxy -> macOS proxy
下禁用 Charles (macos) 代理
查尔斯是一个
HTTP 代理/HTTP 监控器/反向代理,使开发人员能够查看其计算机和 Internet 之间的所有 HTTP 和 SSL/HTTPS 流量。
所以任何类似的事情都可能导致同样的问题。
【讨论】:
对我有用,即使我在遇到错误时没有打开 Charles。 谢谢。我正在使用与 Postgres 的 TLS 连接,Charles 导致它们失败。以上是关于Openssl:错误“证书链中的自签名证书”的主要内容,如果未能解决你的问题,请参考以下文章