我正在尝试通过 pip 安装一个库。即使使用 --cert,SSL 证书也存在问题。在 Windows 上尝试此操作(pip 版本 1.5.4,python 版本 2.7.6):
pip --cert C:\tmp\cacert.pem install robotframework-archivelibrary --proxy http://myproxy
获取页面 https://pypi.python.org/simple/robotframework-archivelibrary/ 无法获取 URL https://pypi.python.org/simple/robotframework-archivelibrary/:连接错误:[Errno 1] _ssl.c:507:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:证书验证失败
有任何想法吗?
答案1
由于我们的公司防火墙拦截了 SSL(即透明 SSL 代理),我也收到了类似的错误消息。我以 .pem 格式导出了对防火墙证书进行签名的根 CA 证书,并将其附加到以下文件中:
C:\Python27\Lib\site-packages\pip\_vendor\requests\cacert.pem
这解决了我的问题。您的问题可能不完全相同,但如果您将正确的 CA 证书放入上述 cacert.pem 中,我相信您可以解决 SSL 证书验证失败的问题。
答案2
由于--cert
对您不起作用,可能是您使用了错误的证书文件。
最有可能的是,您使用了一些公司代理,因此您应该通过访问失败的 URL 来导出您的根证书(例如https://pypi.python.org/simple/robotframework-archivelibrary/
,参见:如何将远程服务器 SSL 证书本地保存为文件)。
如果在CER格式,转换成PEM。
然后使用该 PEM 文件,例如
pip --cert root-cert.pem install robotframework-archivelibrary
答案3
如果pip
抱怨证书错误,则添加一些主机to pip.ini
。
不幸的是,Win10 上的 Python 3.x 没有任何pip.ini
文件,因此您必须powershell/cmd
使用以下命令手动创建它:
mkdir C:\ProgramData\pip
用记事本创建一个文件
C:\ProgramData\pip\pip.ini
:[global] trusted-host = pypi.org (new-line) files.pythonhosted.org
使用 检查pip config -v list
。你应该在最后一行看到以下内容:
global.trusted-host='pypi.org\nfiles.pythonhosted.org'
表示\n
应作为条目一部分的新行trusted-host
。
答案4
我也遇到了同样的问题,这是因为我的防病毒软件(Eset“智能安全”)正在过滤 SSL/TLS。禁用它后一切都正常了。