【问题标题】:Openssl : error "self signed certificate in certificate chain"Openssl:错误“证书链中的自签名证书”
【发布时间】:2012-08-24 05:13:43
【问题描述】:

当我使用 openssl API 验证服务器证书(自签名)时,出现以下错误:

1 深度查找时出现错误 19:证书中的自签名证书 链

根据openssl documentation,这个错误(19)是

"X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN:自签名证书在 证书链 - 证书链可以使用 不受信任的证书,但在本地找不到根。”

为什么会出现这个错误?我的服务器证书有问题吗?

【问题讨论】:

    标签: c linux openssl ssl-certificate verify


    【解决方案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 并尝试构建 容器,那么您很可能会收到此错误。

        确保在 proxy -> macOS proxy 下禁用 Charles (macos) 代理

        查尔斯是一个

        HTTP 代理/HTTP 监控器/反向代理,使开发人员能够查看其计算机和 Internet 之间的所有 HTTP 和 SSL/HTTPS 流量。

        所以任何类似的事情都可能导致同样的问题。

        【讨论】:

        • 对我有用,即使我在遇到错误时没有打开 Charles。
        • 谢谢。我正在使用与 Postgres 的 TLS 连接,Charles 导致它们失败。
        猜你喜欢
        • 1970-01-01
        • 2017-12-18
        • 2015-09-08
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2011-01-16
        • 2019-01-23
        • 2018-03-26
        相关资源
        最近更新 更多