Poetry配置自签名CA源后无法处理重定向SSL验证问题
解决指定PyPI源安装包时的SSL验证失败问题
你的推测完全正确——问题出在Poetry访问pypi.org时,错误地使用了你配置的自签名CA证书验证pypi.org的官方证书,导致验证不通过。这是因为当你设置自定义源的CA证书后,若环境SSL信任链被限制为仅信任该自签名CA,或Poetry全局SSL配置被意外覆盖,就会影响所有HTTPS请求,包括对pypi.org的请求。
解决方法
1. 确保证书配置仅针对自定义PyPI源
先检查Poetry的证书配置,避免全局覆盖:
- 查看当前所有证书相关配置:
poetry config --list | grep certificate - 如果存在全局的
certificates.default.cert配置,立即删除:poetry config certificates.default.cert --unset - 确认仅自定义源
mypypiserver绑定了CA证书(你已配置,可再次确认):poetry config certificates.mypypiserver.cert /path/to/ca.crt
2. 让Poetry同时信任系统根CA和自定义CA
需要让Poetry的SSL信任链同时包含系统默认根CA(验证pypi.org)和自签名CA(验证自定义PyPI服务器),有两种方式:
方式A:合并CA证书到系统信任存储
- Linux:
sudo cp /path/to/ca.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates - macOS:
打开「钥匙串访问」应用,导入ca.crt,右键点击证书选择「显示简介」,在「信任」选项卡设置「使用此证书时」为「始终信任」。 - Windows:
打开控制面板→「管理工具」→「计算机管理」→「证书(本地计算机)」→「受信任的根证书颁发机构」,右键「所有任务」→「导入」,选择ca.crt完成导入。
方式B:使用合并的CA证书文件(无需修改系统配置)
- 把系统默认根CA文件和自签名CA合并成一个文件:
# Linux示例 cat /etc/ssl/certs/ca-certificates.crt /path/to/ca.crt > ~/combined_ca.crt # macOS示例 cat /etc/ssl/cert.pem /path/to/ca.crt > ~/combined_ca.crt - 运行Poetry时指定该合并文件:
REQUESTS_CA_BUNDLE=~/combined_ca.crt poetry add --source pypi matplotlib - 如需持久化,可将环境变量添加到shell配置文件(如
~/.bashrc或~/.zshrc):export REQUESTS_CA_BUNDLE=~/combined_ca.crt
3. 确认PyPI源配置正确
检查pyproject.toml中的源配置,确保官方PyPI源未被错误配置:
[[tool.poetry.source]] name = "mypypiserver" url = "https://server.url/" default = true secondary = false [[tool.poetry.source]] name = "pypi" url = "https://pypi.org/simple/" secondary = true
- 确保未给官方PyPI源配置错误的证书:
poetry config certificates.pypi.cert --unset
4. 临时绕过SSL验证(仅测试用,不推荐生产环境)
如果只是临时测试,可通过环境变量关闭SSL验证:
PYTHONHTTPSVERIFY=0 poetry add --source pypi matplotlib
注意:此方法会禁用所有SSL证书验证,存在安全风险,仅用于排查问题。
内容的提问来源于stack exchange,提问作者Shuri2060
相关产品推荐
相关产品推荐

