Windows系统下Python pip SSL证书验证失败问题求助
Windows下pip SSL证书验证失败(自签名证书错误)的根源排查
问题背景
两天前起,Windows系统中无论是原生Python还是3.9/3.10/3.11版本的虚拟环境,执行pip安装包时均触发以下错误:
ERROR: Could not install packages due to an OSError: HTTPSConnectionPool(host='files.pythonhosted.org', port=443): Max retries exceeded with url: /packages/da/6d/1235da14daddaa6e47f74ba0c255358f0ce7a6ee05da8bf8eb49161aa6b5/pandas-1.5.3-cp311-cp311-win_amd64.whl (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate (_ssl.c:992)')))
已尝试以下方案但均无效:
- 下载并配置
cacert.pem到SSL_CERT_FILE环境变量 - 升级pip至最新版本
- 添加
--trusted-host参数信任PyPI域名 - 更新
certifiCA证书包 - 使用
--no-verify参数禁用SSL验证
核心问题根源
错误提示中的「self signed certificate」是关键,说明网络请求被中间设备/软件拦截,并替换成了自签名证书,而非目标服务器的真实证书。常见原因包括:
- 企业内网代理/防火墙:公司网络通常部署SSL拦截设备,生成自签名证书监控HTTPS流量,导致pip验证证书失败。
- 杀毒软件/安全工具的SSL扫描:部分杀毒软件的「SSL流量扫描」功能会插入自签名证书,拦截所有HTTPS请求。
- 系统级代理工具:全局代理工具(如VPN、代理客户端)开启SSL解密功能时,也会生成自签名证书。
- 环境变量未正确生效:即使设置了
SSL_CERT_FILE,若终端/IDE未完全重启,或虚拟环境未继承该变量,pip依然会使用旧的CA证书路径。
排查与解决步骤
- 临时关闭拦截类软件/代理
- 关闭所有VPN、代理工具,禁用杀毒软件的SSL扫描/实时防护功能,再尝试pip安装。如果问题解决,说明是这类工具导致的。
- 验证CA证书路径
- 执行以下命令查看当前pip使用的CA证书路径:
python -c "import certifi; print(certifi.where())" - 确认该路径是否与你设置的
SSL_CERT_FILE一致,若不一致,说明环境变量未生效或pip未使用certifi包的证书。
- 执行以下命令查看当前pip使用的CA证书路径:
- 强制指定CA证书
- 在pip命令中直接指定下载的cacert.pem路径:
pip install pandas --cert "C:\path\to\your\cacert.pem"
- 在pip命令中直接指定下载的cacert.pem路径:
- 配置pip全局信任
- 在用户目录下创建
pip\pip.ini文件(路径:%USERPROFILE%\pip\pip.ini),添加以下内容:[global] trusted-host = pypi.org files.pythonhosted.org cert = C:\path\to\your\cacert.pem - 保存后重启终端,pip会自动使用这些配置。
- 在用户目录下创建
- 检查系统证书存储
- 打开Windows「证书管理器」(运行
certmgr.msc),查看「受信任的根证书颁发机构」中是否有未知的自签名证书,若有,可将其导出后添加到pip的CA证书包中。
- 打开Windows「证书管理器」(运行
内容的提问来源于stack exchange,提问作者notarealgreal
相关产品推荐
相关产品推荐

