使用虚拟环境时的证书验证

2024-06-16 14:21:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我的计算机上安装了根CA证书,使用请求库的系统安装发出请求时,一切正常:

$ python -c 'import requests; print requests.get("https://example.com")'
<Response [200]>

但是,如果我从虚拟环境中发出相同的请求,则证书验证将失败:

$ python -c 'import requests; print requests.get("https://example.com")'
requests.exceptions.SSLError: [Errno 1] _ssl.c:510: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

使用requests.certs.where我可以看到系统安装使用系统CA捆绑包,虚拟环境使用随请求提供的CA捆绑包:

$ python -c "import requests; print requests.certs.where()"
/etc/ssl/certs/ca-certificates.crt

$ (venv) python -c "import requests; print requests.certs.where()"                                                            
.../venv/local/lib/python2.7/site-packages/requests/cacert.pem

在使用virtualenv时,是否有其他解决方案可以在不提供每个请求的路径的情况下获取系统证书,即:

>>> requests.get("https://example.com" verify="/etc/ssl/certs/ca-certificates.crt")

Tags: httpsimportcomsslgetexample系统虚拟环境