【问题标题】:SSL error : routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failedSSL 错误:例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
【发布时间】:2026-02-13 17:35:02
【问题描述】:

我在txt 文件中有大量文件下载链接。我正在尝试编写一个python 脚本来一次下载所有文件,但最终出现以下错误:

SSLError: [Errno 1] _ssl.c:499: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed 

文件正在通过 Intranet 下载。

我尝试通过浏览器下载文件,然后弹出some certificate。我试图用谷歌搜索它,但没有找到解决这个问题的方法。

【问题讨论】:

    标签: python file ssl


    【解决方案1】:

    服务器证书无效,因为它是由无效的 CA(内部 CA、自签名等)签名的,与服务器的名称不匹配,或者因为它已过期。

    无论哪种方式,你都需要知道如何告诉你正在使用的 Python 库,如果你真的想从这个服务器下载文件,它不能停留在一个无效的证书上。

    【讨论】:

    • 不客气。如果它解决了您的问题,请将答案标记为已接受。无论如何,我祝你好运。
    • 我试图根据你的建议找到一种方法,但我没有找到任何可以解决我问题的方法。如果我尝试通过 chrome 下载文件,它会弹出证书验证单点登录。你认为这可能是问题吗?谢谢
    • 不太可能,不。弹出窗口是一个应用程序,并且您的 python 脚本似乎没有达到这个程度,或者它是一个 SSL 客户端证书请求,它发生在 SSL 服务器验证之后,显然失败了。所以不,我不这么认为。你能用 ssldump 或 wireshark/tcpdump 追踪吗?
    【解决方案2】:

    自己在使用requests时亲身体验过:

    这是非常不安全的;仅作为最后的手段使用!(参见 rdlowrey 的评论。)

    requests.get('https://github.com', verify=True)
    

    verify=False 对我有用。

    【讨论】:

    • 这是一个非常次优的方法。简单地禁用对等验证是非常不安全的,并且会让您很容易受到中间人攻击。这不是“解决方案”。
    • 当然可以,但有时你别无选择。
    • 除了这个解决方案我别无选择。
    • 当您“别无选择”时,这绝对是最好的解决方案。在我的情况下,我正在向证书过期的第三方网络服务请求信息。
    【解决方案3】:

    今天遇到这个问题,逛了几个小时才知道我的服务器日期时间错误。

    因此,在深入探讨此问题之前,请先检查您的服务器日期时间。

    也可以试试

    >> sudo update-ca-certificates
    

    【讨论】:

    • 正在测试设置未来日期的东西。这是黄金。
    • 这真的对我有用,我在解析 SDK 时遇到了同样的问题。
    • 假设ntp安装正确: 1. timedatectl set-ntp true 2. update-ca-certificates
    【解决方案4】:

    最近在使用 ubuntu 14.04LTS 上的请求的 python 应用程序中遇到了同样的错误,我认为它运行良好(也许是这样,并且发生了一些更新)。执行以下步骤为我修复了它:

    pip install --upgrade setuptools
    pip install -U requests[security]
    

    这是一个参考: https://*.com/a/39580231/996117

    【讨论】:

      【解决方案5】:

      也可能在您的本地时间关闭时发生(例如,在证书验证时间之前),我的错误就是这种情况...

      【讨论】:

        【解决方案6】:

        由于certifi 库,我遇到了同样的问题。安装不同的版本也对我有帮助。

        【讨论】:

          【解决方案7】:

          通常更新 certifi 和/或 certifi cacert.pem 文件会起作用。我还必须更新我的 python 版本。比。 2.7.5 无法正常工作,因为它处理 SNI 请求的方式。

          一旦您拥有最新的 pem 文件,您就可以使用以下方式发出 http 请求:

          requests.get(url, verify='/path/to/cacert.pem')

          【讨论】: