Win10 Python3.5下requests访问google.com报SSL证书验证失败如何解决
问题解决方案
方案1:升级Python版本(优先推荐)
- 你当前使用的Python 3.5.0已于2020年停止官方维护,最新版本的requests、pyOpenSSL、certifi等依赖包不再对3.5版本做兼容性适配,这是导致证书校验失败的核心原因。
- 升级到Python 3.8及以上稳定版本后,重新安装所有依赖包即可解决90%以上的这类兼容性问题。
方案2:同步certifi根证书到系统最新根证书(适合暂时无法升级Python的场景)
- 首先找到当前Python环境的certifi证书存储路径,运行以下代码即可打印路径:
import certifi print(certifi.where())
- 导出Windows系统内置的根证书集合:按下Win+R输入
certmgr.msc打开证书管理器,展开「受信任的根证书颁发机构」→「证书」,导出所有根证书为Base64编码的X.509格式单个文件。 - 用导出的系统根证书文件,完全替换掉刚才打印出的certifi证书文件即可,后续所有调用requests的请求都会自动使用最新的系统根证书校验。
方案3:全局修改requests默认校验规则(临时应急方案,不推荐长期使用)
- 如果你不需要修改业务代码,可在脚本最开头添加以下代码,全局关闭requests的SSL校验,同时关闭相关警告:
import requests from requests.packages.urllib3.exceptions import InsecureRequestWarning # 全局关闭SSL校验相关警告 requests.packages.urllib3.disable_warnings(InsecureRequestWarning) # 重写默认session的请求逻辑,强制添加verify=False参数 old_request = requests.Session.request def new_request(*args, **kwargs): kwargs['verify'] = False return old_request(*args, **kwargs) requests.Session.request = new_request
- 这段代码会劫持所有requests的请求默认参数,包括google-auth-oauthlib内部调用的请求,不需要修改原有业务代码即可生效。
方案4:卸载pyOpenSSL回退到系统原生SSL处理
- urllib3会优先使用安装的pyOpenSSL做SSL处理,你可以直接卸载pyOpenSSL,让urllib3回退使用Python标准库自带的ssl模块处理SSL请求,兼容性会更好:
pip uninstall pyopenssl -y
- 卸载后重新运行测试代码验证即可。
内容的提问来源于stack exchange,提问作者Arnav Vashisth
相关产品推荐
相关产品推荐

