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:错误“证书链中的自签名证书”的主要内容,如果未能解决你的问题,请参考以下文章

Heroku 登录错误:证书链中的自签名证书

Ionic Cordova 资源错误:证书链中的自签名证书

SSL证书问题:证书链中的自签名证书

Curl 错误 60,SSL 证书问题:证书链中的自签名证书

错误:节点 js 应用程序中证书链中的自签名证书

防病毒软件正在阻止 nodemailer - 错误:证书链中的自签名证书