【问题标题】:SSL: CERTIFICATE_VERIFY_FAILED certificate verify failed in PythonSSL:CERTIFICATE_VERIFY_FAILED 证书验证在 Python 中失败
【发布时间】:2021-03-02 19:03:39
【问题描述】:

在 Python 中编写 POST REQUEST 时,我遇到了一些问题:

self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:1108)

我不想在请求中设置:verify = False

我该如何处理这个问题?

【问题讨论】:

    标签: python rest request get-request


    【解决方案1】:

    发生错误是因为服务器使用的证书不是由 requests 模块使用的默认受信任 CA 列表中包含的证书颁发机构 (CA) 颁发的。它是一个自签名证书,因此您需要明确告诉requests 以信任该单独的证书,或者(最好,如果服务器在您的控制之下),获取由一个受信任的 CA 签名的证书并制作服务器改用它。

    要仅信任服务器正在使用的确切证书,请下载它,而不是设置verify=False,而是设置verify="/path/to/cert.pem",其中cert.pem 是服务器证书。

    【讨论】:

    • 错误甚至说“自签名证书”,所以很可能你的假设是正确的。
    • 啊是的,没看到
    • @Phydeaux:能否给出ca-bundle.pem的存放路径?
    • @SylwiaKrakowska 查看编辑 - 证书是自签名的,因此没有单独的 CA 包 - 您需要将服务器证书保存在某处(您选择在哪里)并告诉 requests 在哪里可以找到它.
    • @Phydeaux:我尝试使用 verify = "C:/Users/XXX/AppData/Local/Programs/Python/Python38/Lib/test/cert.pem") 但我遇到了下一个问题: raise IOError("Could not find a suitable TLS CA certificate bundle, " OSError: Could not find a suitable TLS CA certificate bundle, invalid path。你能帮我解决这个问题吗?
    【解决方案2】:

    以下是有关创建正确 .pem 文件的更详细说明:

    following URL 包含使用各种浏览器从网站下载 SSL 证书的说明。您需要创建一个证书链 .pem 文件,为此您需要使用 Firefox。我们会假装 google.com 是您遇到困难的网站。当您进入证书页面时,您将看到如下内容:

    在此示例中,您可以选择 GTS CA 101 或 GlobalSIGN,然后单击 PEM (chain) 下载链接。这将在您选择的目录中创建一个文件google-com-chain.pem

    然后在指定源verify=False 的地方,将其替换为 `verify='/path-to/google-com-chain.pem'

    【讨论】:

      【解决方案3】:

      导入请求
      response = requests.get("你要命中的url/api", verify="ssl证书路径")

      对我来说,问题是上述答案都没有完全帮助我,但给了我正确的方向。

      当然,需要 SSL 证书,但是当您位于公司的防火墙之后,公开可用的证书可能无济于事。您可能需要联系您公司的 IT 部门以获取证书,因为每个公司都使用他们已签订服务合同的安全提供商提供的特殊证书。并将其放在一个文件夹中,并将该文件夹的路径作为参数传递给验证参数。

      对我来说,即使尝试了上述所有解决方案并使用了错误的证书,我也无法使其正常工作。因此,请记住为那些在公司防火墙后面的人获取正确的证书。它可以决定您的请求调用的成功与否。

      在我的情况下,我将证书放在以下路径中,它就像魔术一样工作。

      C:\Program Files\Common Files\ssl

      您也可以参考https://2.python-requests.org/en/master/user/advanced/#id3 讨论 ssl 验证

      【讨论】:

        猜你喜欢
        • 2018-03-15
        • 1970-01-01
        • 1970-01-01
        • 2017-11-22
        • 2023-04-02
        • 1970-01-01
        • 2021-11-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多