Mac OSX python ssl.SSLError:[SSL:CERTIFICATE_VERIFY_FAILED]证书验证失败(_ssl.c:749)

时间:2017-02-07 19:17:15

标签: python macos ssl

python中的许多操作都需要通过https访问。这包括pip安装,或仅使用http.client.HTTPSConnection,或内部使用这些内容的任何模块或应用程序。

如果从官方python pkg安装程序安装python,从https://python.org下载,则它使用openssl的内部版本,并且不包含根证书。任何使用SSL连接的内容都会导致此错误:

class Foo {
   private:
      Bar& bar; // shared by other objects
      int size;
      //several other instance variables

      static Bar& getDefaultBar();

   public:
      Foo(int s, Bar& b) : size(s), bar(b) {}

      Foo(int s) : size(s), bar(getDefaultBar()) {}

}

Bar& Foo::getDefaultBar()
{
   static Bar b(24);
   return b;
}

如何安装根证书以使上述错误消失?

12 个答案:

答案 0 :(得分:123)

运行python安装程序时,它们会向您显示此信息。它也记录在ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:749) 中,但它很容易被忽视。

只需浏览/Applications/Python 3.6/ReadMe.rtf,然后双击Applications/Python 3.6

Python bug跟踪器中存在此问题。 http://bugs.python.org/issue29480

答案 1 :(得分:12)

解决所有Python版本且无需在macOS上检查版本的简单方法

bash /Applications/Python*/Install\ Certificates.command

此命令等效于:

...
bash /Applications/Python\ 2.7/Install\ Certificates.command
bash /Applications/Python\ 3.6/Install\ Certificates.command
bash /Applications/Python\ 3.7/Install\ Certificates.command
...

它帮助了我,希望对您有帮助

答案 2 :(得分:8)

如果pip无法解决问题

pip3 install --upgrade certifi

如果找不到“ 安装证书。命令

,请尝试以下脚本
#!/usr/bin/env python3
# install_certifi.py
#
# sample script to install or update a set of default Root Certificates
# for the ssl module.  Uses the certificates provided by the certifi package:
#       https://pypi.python.org/pypi/certifi

import os
import os.path
import ssl
import stat
import subprocess
import sys

STAT_0o775 = ( stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
             | stat.S_IRGRP | stat.S_IWGRP | stat.S_IXGRP
             | stat.S_IROTH |                stat.S_IXOTH )


def main():
    openssl_dir, openssl_cafile = os.path.split(
        ssl.get_default_verify_paths().openssl_cafile)

    # +++> if already done  <----
    #print(" -- pip install --upgrade certifi")
    #subprocess.check_call([sys.executable,
    #    "-E", "-s", "-m", "pip", "install", "--upgrade", "certifi"])

    import certifi
    # change working directory to the default SSL directory
    os.chdir(openssl_dir)
    relpath_to_certifi_cafile = os.path.relpath(certifi.where())
    print(" -- removing any existing file or link")
    try:
        os.remove(openssl_cafile)
    except FileNotFoundError:
        pass
    print(" -- creating symlink to certifi certificate bundle")
    os.symlink(relpath_to_certifi_cafile, openssl_cafile)
    print(" -- setting permissions")
    os.chmod(openssl_cafile, STAT_0o775)
    print(" -- update complete")

if __name__ == '__main__':
    main()

答案 3 :(得分:7)

我使用以下命令解决了这个问题:

open /Applications/Python\ 3.7/Install\ Certificates.command

我的机器上装有Python 3.7。

检查此链接-Fixing CERTIFICATE_VERIFY_FAILED error when trying requests-html out on Mac

答案 4 :(得分:3)

就我而言,所有解​​决方案都不适用于在macOS Catalina中安装了python3的系统,也不适用于通过brew安装的python3。

如果有人遇到这种情况并想要快速解决,
使用https://www.python.org/downloads/

重新下载并安装python3

在安装结束时,安装程​​序将向您显示一条注释,要求您运行Install Certificates.command文件。
(在其他安装中,此文件不存在,并且the solution都没有使文件的源代码正常工作)

重新启动终端,您可以键入where python3来查看/Library/Frameworks/Python.framework/Versions/3.8/bin/python3。使用此二进制文件,应该不会出现此问题。

注意:可能可以使系统安装的python3正常工作,但就我而言;事实证明,这非常困难,所以我选择这种方式。

答案 5 :(得分:2)

如果您仍然安装了python3.5,那么只需使用python3.5。

推送到PyPI:

def number_letter(a, b): lst = [] ##a is the letters ["A", "B", "C"] ##b is the lists of numbers [[0.5, 0.5, 0], [0.05, 0.3, 0.65]] ##together if a user was calling it, it would look like this ##number_letter(["A", "B", "C"], [[0.5, 0.5, 0], [0.05, 0.3, 0.65]]) ##Outputs relating numbers from 'b' with letters from 'a' in descending order (the values are summed) ##[[0.8, "B"], [0.65, "C"], [0.55, "A"]]

python3.5 setup.py register -r pypitest

pipping似乎可以正常使用3.6开箱即用..

答案 6 :(得分:0)

当我尝试在Keras数据加载中运行Python时,我遇到了同样的问题。对我来说,错误是:

Exception: URL fetch failure on AWS_URL: None -- [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:833)

我通过将证书升级为以下方式解决了我的问题:

pip install --upgrade certifi

答案 7 :(得分:0)

对我来说,这是请求的错误说明。我打了一个 https 电话而不是 http 电话。改成http就解决了。

答案 8 :(得分:0)

确认您不在 virtualenv 中。 我尝试了以上但没有成功,只是意识到我的安装失败了,因为我在一个 virtualenv 上

答案 9 :(得分:0)

确保您没有设置 SSL_CERT_FILE 环境变量。我遇到了同样的问题,我花了一段时间才发现某些应用程序在我的 bash 配置文件中将此变量设置为空字符串。

答案 10 :(得分:0)

我在 macOS Big Sur 上遇到了同样的问题。这是我为解决问题所做的工作。

IDE - Pycharm

已下载 Python 版本 - 3.9.6

  • 下载最新的python版本并删除旧版本
  • 安装时,在最后(总结部分),有一个小提示安装 SSL 证书。仔细阅读摘要部分。
  • 双击摘要中提供的 SSL 证书路径
  • 它将带您到相应的文件夹,其中应该有一个名为“安装证书命令”的文件
  • 双击该文件,它应该会打开终端并自动运行代码。等到您收到“[成功完成]”消息。
  • 完成后关闭并重新启动终端/IDE,这应该可以解决您的问题。

注意:如果您的系统上同时安装了 anaconda 和 python,请检查您是否在 IDE 中使用了正确的 python 版本,该版本下载的是最新版本,而不是来自 Anaconda。

享受。

答案 11 :(得分:-2)

如果您使用的是macOS open finder,然后转到“应用程序”>“ Python3.7”文件夹(或您使用的任何版本的python)>双击“ Install Certificates.command”文件。