Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让Python使用Mac OS TrustStore中的CA证书?_Python_Macos_Ssl_Truststore - Fatal编程技术网

如何让Python使用Mac OS TrustStore中的CA证书?

如何让Python使用Mac OS TrustStore中的CA证书?,python,macos,ssl,truststore,Python,Macos,Ssl,Truststore,我需要在公司内部网上使用curtom根证书,并将其加载到Mac OS TrustStore(KeyChain)中,这确实解决了所有浏览器和GUI应用程序的问题 似乎它甚至可以与Mac OS X附带的curl版本一起使用,但它不适用于python,甚至与Mac OS 10.12 Sierra附带的版本(python 2.7.10)也不适用 不过,我似乎还是会被以下几点击中: urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_F

我需要在公司内部网上使用curtom根证书,并将其加载到Mac OS TrustStore(KeyChain)中,这确实解决了所有浏览器和GUI应用程序的问题

似乎它甚至可以与Mac OS X附带的
curl
版本一起使用,但它不适用于python,甚至与Mac OS 10.12 Sierra附带的版本(python 2.7.10)也不适用

不过,我似乎还是会被以下几点击中:

urllib2.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:590)>
urllib2.URLError:
我怎样才能解决这个问题? 因为我在很多Python工具中都遇到了这个问题,如果我能找到一种不用修补的方法来避免它,我会非常感激

自己提供自定义CA证书不是一个选项,因为我无法修补我使用的数十个Python工具


大多数工具都使用
请求
库,但也有一些工具直接使用Python中的本机ssl支持。

如果将附加证书放在PEM捆绑文件中,则可以使用这两个环境变量覆盖Python openssl和请求使用的默认证书存储

SSL_CERT_FILE=/System/Library/OpenSSL/cert.pem
REQUESTS_CA_BUNDLE=/System/Library/OpenSSL/cert.pem

请注意,此文件不存在,您需要自己构建。

这也是使用MacOS Sierra的Python 3.6中的一个问题。我知道你的用例是不同的。但我在调查这个问题时偶然发现了这个线索。因此,如果有人也有这篇文章值得一看:

简而言之:Python 3.6不再依赖MacOS的openSSL。它附带了自己的openSSL捆绑包,并且没有访问MacOS根证书的权限

您有两个选择:

运行Python 3.6附带的安装命令

cd /Applications/Python\ 3.6/
./Install\ Certificates.command

使用安装

pip install certifi

我选择了第一个选项,它成功了。

对于我来说,
/Applications/Python\3.6//Install\Certificates
命令在pip certifi安装时失败。我在mac High Sierra上使用python3,所以pip有些失败,我不得不使用pip3

我所做的是:

  • 在shell中手动运行
    pip3安装--update certificate
  • 从命令脚本中删除install certifi行
  • 重新运行脚本,一切都很好

  • 请注意,您将在中找到cert.pem符号链接:
    /Library/Frameworks/Python.framework/Versions/3.6/etc/openssl/

    作为更新和数据点,我在macOS 10.13.4上运行Python 3.7.0时遇到了这个问题:

    $ ipython
    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 26 2018, 23:26:24)
    Type 'copyright', 'credits' or 'license' for more information
    IPython 7.0.1 -- An enhanced Interactive Python. Type '?' for help.
    
    In [1]: import bokeh.sampledata
    
    In [2]: bokeh.sampledata.download()
    Using data directory: /Users/me/.bokeh/data
    
    ...
    SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1045)
    
    解决此问题的说明见
    /Applications/Python\3.7/ReadMe.rtf

    按照那里的建议,运行
    /Applications/Python\3.7/Install\Certificates.command
    解决了这个问题:

    从终端:

    $ /Applications/Python\ 3.7/Install\ Certificates.command
    
    重新启动IPython

    $ ipython
    >>> import bokeh.sampledata
    
    >>> bokeh.sampledata.download()
    Using data directory: /Users/me/.bokeh/data
    Downloading: CGM.csv (1589982 bytes)
       1589982 [100.00%]
    ...
    

    Mac brew安装python环境

    $ python3
    Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 16:52:21) 
    [Clang 6.0 (clang-600.0.57)] on darwin
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import certifi
    >>> certifi.where()
    '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem'
    >>> 
    
    或从命令行:

    $ python -m certifi
    
    然后需要链接cacert.pem作为cert.pem

    $ ln -s /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem cert.pem
    $ pwd
    /Library/Frameworks/Python.framework/Versions/3.7/etc/openssl
    
    rehash
    

    然后工作正常。

    运行此命令以设置适当的变量。这是这里已经给出的答案的组合。把它放在你的~/.bash_档案中,使它永久存在

    CERT_PATH=$(python -m certifi)
    export SSL_CERT_FILE=${CERT_PATH}
    export REQUESTS_CA_BUNDLE=${CERT_PATH}
    

    还有一个选项是从自制软件中获取python,它会自动为您完成;还需要在OpenSSL目录中创建符号链接,这就是第一个选项中的命令所做的。有关详细信息,请参阅。此解决方案已停止在OSX Catalina中使用Python3.7。没有/Applications/Python 3.7目录,安装证书命令不存在。安装认证也不能解决这个问题#卡住了!!gggrrrr。。。。有人在卡塔琳娜身上解决了这个问题吗?这很有效。如果您有自定义CA证书,请将它们添加到/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/certifi/cacert.pem,然后重新运行/Applications/Python\3.7/Install\Certificates.command我认为这个解决方案很好,但对于使用pyenv或直接构建Python的人来说还不够。安装
    certifi
    后,我们需要遵循以下相关内容:为什么我们首先需要这些证书?这可能不会让您面临安全漏洞吗?我的位于/Library/Frameworks/Python.framework/Versions/2.7/etc/openssl/cert.pem//,将
    REQUESTS\u CA\u BUNDLE
    设置到堆栈中。pem I生成修复了我的问题,请求内部根CA。谢谢,@Sorin.尝试了很多方法,但这是唯一有效的方法。库多斯:太棒了!这个答案与在Python3.8VirtualEnv设置中修复我的问题最相关,在该设置中Jupyter notebook遇到了证书错误。我在env中找到了“.bash_profile”。就是这样。@Shanti看来你已经解决了我一直在苦苦挣扎的问题……请快速看一下我的问题:没有为我工作。Python 3.9.2通过Mac OS Big Sur 11.2上的
    brew
    安装。3@MarcelloRomani我使用Mac OS Big Sur 11.2.3,它是成功的。