gue*_*tli 30 python ssl curl pip
我们在客户端上安装了我们的根证书,并且https连接适用于curl
.
但如果我们尝试使用pip
它,它会失败:
Could not fetch URL https://installserver:40443/pypi/simple/pep8/:
There was a problem confirming the ssl certificate:
<urlopen error [Errno 1] _ssl.c:499: error:14090086:SSL
routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed>
Run Code Online (Sandbox Code Playgroud)
证书在客户端.看到:
(foo_fm_qti)foo_fm_qti@vis-work:~$ curl -v https://installserver:40443/pypi/simple/pep8/
* About to connect() to installserver port 40443 (#0)
* Trying 127.0.0.1... connected
* Connected to installserver (127.0.0.1) port 40443 (#0)
* successfully set certificate verify locations:
* CAfile: none
CApath: /etc/ssl/certs/
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using DHE-RSA-AES256-SHA
* Server certificate:
* subject: C=DE; ST=Sachsen; L=Chemnitz; O=FOO-COM GmbH; OU=DV; CN=gray.foo-com.lan; emailAddress=info@foo-com.de
* start date: 2013-09-09 10:47:50 GMT
* expire date: 2019-05-24 10:47:50 GMT
* subjectAltName: installserver matched
* issuer: C=DE; ST=Sachsen; L=Chemnitz; O=FOO-COM GmbH; CN=FOO-COM Root CA; emailAddress=info@foo-com.de
* SSL certificate verify ok.
> GET /pypi/simple/pep8/ HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
版本:pip 1.4.1
gue*_*tli 36
不幸的是,pip不使用系统证书,但curl会这样做.
我找到了解决方案:
pip --cert /etc/ssl/certs/FOO_Root_CA.pem install pep8
Run Code Online (Sandbox Code Playgroud)
这不好(curl和其他库在没有添加参数的情况下找到证书)但是有效.
如果您不想使用命令行参数,可以在〜/ .pip/pip.conf中设置cert:
[global]
cert = /etc/ssl/certs/Foo_Root_CA.pem
Run Code Online (Sandbox Code Playgroud)
小智 21
我的解决办法是下载cacert.pem
从http://curl.haxx.se/ca/cacert.pem
和路径添加cacert.pem
到~/.pip/pip.conf
为guettli建议
[global]
cert = /path/to/cacert.pem
Run Code Online (Sandbox Code Playgroud)
对我来说,没有一个配置文件解决方法有效。我在Ubuntu 14.04上使用pip 1.5.4
@arjenve 发布的命令也不适用于我的系统。我得到:/usr/bin/python: No module named _vendor.requests
更新
比我的第一个解决方法更好的解决方案是首先在系统上安装证书(对我来说在 ubuntu 上是这样)
sudo cp ~/my_cert.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
以前的自动更新捆绑文件(检查底部/etc/ssl/certs/ca-certificates.crt
现在应该看到与 中相同的证书my_cert.crt
)
现在将该路径导出PIP_CERT
并添加到您的.bashrc
:
echo export PIP_CERT=/etc/ssl/certs/ca-certificates.crt >> ~/.bashrc
Run Code Online (Sandbox Code Playgroud)
较旧的解决方法
我的解决方法是从/etc/ssl/certs/ca-certificates.crt
我公司的 crt创建一个包文件(只是连接两个文件)。然后.bashrc
像这样导出一个变量(把它放在 my 上):
export PIP_CERT=/my/path/to/the/bundle.crt
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
37547 次 |
最近记录: |