Artifactory中PyPI远程仓库访问files.pythonhosted.org SSL验证失败如何解决
根因定位
你遇到的报错
Connection to remote repository failed: Certificate for doesn't match any of the subject alternative names: [r.shared-319-default.ssl.fastly.net]
是典型的SNI(服务器名称指示)扩展未启用导致的证书不匹配问题。
SNI是TLS协议的扩展功能,同一IP托管多个HTTPS域名时,需要请求端携带目标域名信息,服务端才会返回对应域名的SSL证书。你的测试结果也验证了该逻辑:
- 未携带域名信息请求时,只返回IP对应的默认Fastly证书,与
files.pythonhosted.org域名不匹配:
openssl s_client -connect files.pythonhosted.org:443
subject=/CN=r.shared-319-default.ssl.fastly.net
- 携带域名信息请求时,返回正确的pythonhosted.org通配符证书:
openssl s_client -servername files.pythonhosted.org -connect files.pythonhosted.org:443
subject=/CN=*.pythonhosted.org
你使用的Artifactory 7.3.2版本中,system.yaml配置里显式禁用了Java运行环境的SNI支持:
extraJavaOpts: -Djsse.enableSNIExtension=false
该配置是导致问题的直接原因。
修复步骤
- 打开Artifactory的
system.yaml配置文件 - 删除上述禁用SNI的配置行
- 重启Artifactory服务使配置生效
- 进入PyPI远程仓库设置页面,点击
Test按钮验证连接,即可正常连通。
替代方案
如果暂时无法修改配置重启服务,可将Artifactory升级到更高版本,高版本默认不会禁用SNI扩展,无需额外修改配置即可正常对接PyPI官方源。
内容的提问来源于stack exchange,提问作者Skiedude

