在Windows上,安装pip时出现SSL: CERTIFICATE_VERIFY_FAILED错误。

3

我是在使用一台Windows公司电脑。我有自己的索引,托管在https网站上。我知道可以使用trusted-host避免使用https,但我想使用它。

我正在尝试安装以下软件包:

 pip install -i https://pathtoindex/simple/ pkgname

但是我遇到了以下错误:
Could not fetch URL [...] There was a problem confirming the ssl
certificate: [SSL: CERTIFICATE_VERIFY_FAILED]
certificate verify failed (_ssl.c:590) - skipping

我曾尝试从Mozilla下载我的域名的.pem证书文件,我使用了以下命令:

pip --cert dirtocert/cert.pem install -i https://pathtoindex/simple/ pkgname

这个也不行,仍然会出现相同的错误。

你所指的.pem文件是什么?你已经下载了相应的CA文件来获取你的证书了吗? - Daniel
这里我有点模糊,我所做的只是在Mozilla上访问托管pip索引的https网站并从中下载。 - snowleopard
你能发布一下你所指的索引的URL吗?它是私有的吗?你使用自签名证书吗? - Daniel
我创建了一个自定义索引。它托管在内部网络上。证书由IT部门提供。 - snowleopard
1个回答

1
你需要证书颁发机构为你的服务提供的根CA证书。无论是自签名还是商业提供者提供的证书,你的IT部门都应该能够提供证书。
你也可以使用openssl查看你的证书:
openssl s_client -showcerts -connect your-domain.com:443

(或者您可以使用浏览器来完成此操作。单击地址栏中的锁定图标,然后选择“详细信息”(或类似的选项)...)

在“服务器证书”下应该有一个“颁发者”部分。如果颁发者是您的公司,则很可能使用的是自签名证书。如果是其他内容(例如COMODO、StartCom等),则可以使用它们的根或中间CA证书。


我已经验证了,发行人是我的公司。然而,我仍然无法使其工作,您所描述的过程似乎与我上面所做的非常相似。这里是否有代理在起作用的可能性?谢谢。 - snowleopard
但是代理不应该是一个问题,因为托管pip索引的网站在内部网络中,对吗? - snowleopard
你可以使用openssl测试你的连接,命令为openssl s_client -connect your-domain.tld:443。如果需要提供CA证书进行检查,则可以使用命令openssl s_client -connect -CAfile cacert.pem your-domain.tld:443。这里是完整文档的链接 - Daniel
我尝试了两个命令,我相信在你的第二个命令中,-connect 应该出现在 your-domain 之前。无论如何,对于这两个命令,我都得到了以下结果:verify error:num=19:self signed certificate in certificate chain。还有一件事我注意到的是输出显示了一个服务器证书,我发现那个证书正是我在 .pem 文件中使用的证书。 - snowleopard
没关系,我已经解决了,我找到了我的浏览器使用的证书。问题是我使用了来自我的网站的证书。 - snowleopard

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接