Mac Mojave系统Python3运行urllib请求报SSL证书验证错误如何解决?
Mac Mojave系统Python3 urllib SSL证书验证失败解决方案
这个报错是因为Mac平台从python.org官方下载安装的Python3默认不关联系统根证书,自带的证书库未安装或版本过时导致的,可按以下优先级选择解决方案:
方案1:运行Python官方自带证书安装脚本(最推荐,永久生效)
- 打开访达,进入「应用程序」目录下对应你的Python3版本的文件夹,比如Python3.9对应文件夹名为
Python 3.9,直接双击运行文件夹内的Install Certificates.command文件即可。 - 也可以直接在终端执行对应命令,注意替换下方的版本号为你实际安装的Python3大版本:
/Applications/Python\ 3.9/Install\ Certificates.command
方案2:手动更新证书依赖包
如果方案1执行后仍然报错,执行以下命令升级certifi证书库:
pip3 install --upgrade certifi
如果你是通过Homebrew安装的Python3,额外执行以下命令重装系统证书工具:
brew reinstall ca-certificates
方案3:临时关闭证书验证(仅调试用,禁止生产环境使用)
如果仅临时测试不需要验证证书,可以修改代码添加关闭SSL验证的逻辑,修改后代码如下:
import ssl from urllib.request import Request, urlopen from urllib.error import URLError, HTTPError # 创建忽略证书验证的SSL上下文 ssl_ctx = ssl.create_default_context() ssl_ctx.check_hostname = False ssl_ctx.verify_mode = ssl.CERT_NONE req = Request("https://cognito-idp.us-west-2.amazonaws.com/us-west-2_OnQppLqYQ/.well-known/jwks.json") try: # 请求时传入自定义SSL上下文 response = urlopen(req, context=ssl_ctx) except HTTPError as e: print('Error code: ', e.code) except URLError as e: print('Reason: ', e.reason) else: print('good!')
内容的提问来源于stack exchange,提问作者reza
相关产品推荐
相关产品推荐

