如何让Python使用Mac OS TrustStore中的CA证书?
我需要在公司内部网上使用curtom根证书,并将其加载到Mac OS TrustStore(KeyChain)中,这确实解决了所有浏览器和GUI应用程序的问题 似乎它甚至可以与Mac OS X附带的如何让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
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
我所做的是:
pip3安装--update certificate
请注意,您将在中找到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,它是成功的。