当前位置: 首页 > 知识库问答 >
问题:

SSL:macOS 10.15上python3的证书验证失败错误

鲍建业
2023-03-14

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)>

如何解决这个问题?

(我知道答案,很快就会发布;只是分享一下,以防其他人遇到。)

共有3个答案

柳胜
2023-03-14

根据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

欧阳安晏
2023-03-14

问题是/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)。

范承志
2023-03-14

作为@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