Windows 2019下Python 3.9.7使用urllib出现SSL证书验证失败如何解决?
根因说明
你之前的操作存在两个适配范围问题:
- 环境变量
REQUESTS_CA_BUNDLE仅作用于第三方requests库,Python标准库的urllib模块默认不会读取该配置 - 你安装的
python-certifi-win32默认仅适配基于certifi的第三方请求库,标准库的ssl校验逻辑默认不会读取Windows系统证书存储,只会加载Python自带的根证书包。
解决方案
步骤1:获取Python默认根证书文件路径
执行以下Python代码获取内置根证书文件的绝对路径:
import certifi print(certifi.where())
输出路径通常为C:\Python39\lib\site-packages\certifi\cacert.pem。
步骤2:追加信任证书到根证书包
将你已经导出的C:\tmp\repo1-maven-org-chain.pem文件内的所有证书内容,完整复制追加到上一步获取的cacert.pem文件末尾,保存文件即可,不要修改文件原有内容。
步骤3:全局生效配置(可选)
如果你需要所有Python请求都默认使用该配置,可新增系统环境变量:
- 变量名:
SSL_CERT_FILE - 变量值:上一步修改后的
cacert.pem文件的绝对路径
该环境变量会被Python标准库ssl模块默认读取,全局生效。
步骤4:验证配置
执行以下代码验证修复效果:
import urllib.request file_name, headers = urllib.request.urlretrieve("https://repo1.maven.org/fromsearch?filepath=org/antlr/antlr4-runtime/4.9.2/antlr4-runtime-4.9.2.jar") print(file_name)
如果无报错输出临时文件路径,说明配置生效。
内容的提问来源于stack exchange,提问作者Michal Karm Babacek
相关产品推荐
相关产品推荐

