MacOS 10.15上Xcode/CLT的/usr/bin/python3
(目前是DB6/PB5,Xcode 11 beta 6)失败,SSL:CERTIFICATE_VERIFY_FAILED来自PSL的所有HTTPS请求,例如来自urllib.request
>:
$ /usr/bin/python3 -c 'import urllib.request; urllib.request.urlopen("https://www.apple.com/")'
...
urllib.error.URLError: <urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)>
如何解决这个问题?
(我知道答案,很快就会发布;只是分享一下,以防其他人遇到。)
根据GitHub的这个问题,苹果拒绝解决这个问题:
问题的表现与预期相符。
certifi
是第三方模块,而不是Python本身的一部分。
urllib
是一个低级库。它可以处理SSL,但是您必须显式地使用Cafile
设置SSL上下文。
请尝试以下操作:
pip3 install requests
python3 -c 'import requests; print(requests.get("https://apple.com").text)'
如果您只想获取cacert.pem
,您可以使用pip3 Instatefi
,但是您仍然必须显式地将Cafile
传递到urllib
。
问题是/usr/bin/python3
(来自Xcode或CLT)无法正确定位/etc/ssl
中的信任存储,正如我们使用ssl所看到的那样。获取默认路径验证路径()
:
$ /usr/bin/python3 -c 'import ssl; print(ssl.get_default_verify_paths())'
DefaultVerifyPaths(cafile=None, capath=None, openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/certs')
它正在研究不存在的/应用程序/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl
。
知道了这一点,我们可以使用以下方法:
$ sudo rsync -avzP /etc/ssl/ /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/
我已经向苹果提交了一份bug报告(顺便说一句,我刚刚意识到bugreport.Apple.com已经不存在了,我不得不使用反馈助手网站)。开放式雷达https://openradar.appspot.com/7111585(不幸的是,雷达号码错了——因为bugreport.apple.com不存在了,我没有雷达号码了,只有反馈号码FB7111585
)。
作为@4ae1e1答案的补充,您可以创建一个到SSL文件夹的符号链接,而不是同步它。这将提供额外的好处,使/etc/ssl
中的任何更改在/Application/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/ssl/
保持最新。
/usr/bin/sudo /bin/mkdir /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc
/usr/bin/sudo /bin/ln -s /etc/ssl/ /Applications/Xcode.app/Contents/Developer/Library/Frameworks/Python3.framework/Versions/3.7/etc/
我应该这样做。
误差 PHP警告:stream_socket_client():SSL操作失败,代码为1。OpenSSL错误消息:错误:14090086:SSL例程:SSL3_GET_Server_Certifice:证书验证失败
- 我运行了此脚本,但出现了此错误。我怎么做?
问题内容: 在Windows Vista SP2 + Python 2.7.10上,我可以连接到https://www.python.org,但不能连接到https://codereview.appspot.com 剧本: 并输出: 如何解决问题,https://codereview.appspot.com/到底有什么问题? 问题答案: 我的猜测是,它与OpenSSL中的替代链处理有关,如Pyth
最近,我在这里问我的pip有问题,这也影响了我的easy_安装和py2app。根据我在这里得到的答案,我尝试了“安装证书”。昨天晚上的命令。现在,我的pip开始工作了!但是我的easy_install、pip3、easy_install3和py2app仍然无法处理此错误(
问题内容: 遇到了应从具有自签名证书的邮件服务器发送电子邮件的问题,我得到的错误是: 有没有人遇到过类似的事情? 编辑: 我也尝试过设置stream_context参数(params:SSL上下文选项): 运气不好,它仍然会失败,并出现与上述相同的错误。 谢谢。 问题答案: PHP 5.6引入了SSL证书验证,因此,如果您的配置被破坏,它将因该错误而失败。您应该修复SSL,但是可以通过将属性设置为
问题内容: 我陷入了持续的SSL验证问题。 SSL:CERTIFICATE_VERIFY_FAILED 我在构建让用户使用Mozilla Persona进行身份验证的Django应用程序时发现了错误。 我得到一个追溯从到到: python3和python2之间的区别 这就是它开始变得有趣的地方:使用python2.7时,我没有遇到相同的问题: 我的第一个想法是这两个版本的证书可能使用不同的证书[1