首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有证书的请求接收CERTIFICATE_VERIFY_FAILED

带有证书的请求接收CERTIFICATE_VERIFY_FAILED
EN

Stack Overflow用户
提问于 2018-03-09 18:14:15
回答 1查看 1.3K关注 0票数 2

我正在经历一些与请求和证书有关的奇怪行为,并且不完全确定它们是否/如何与我的系统的CA包交互,以及它们应该是怎样的。

本地(ubuntu16.04),在虚拟

当我在本地使用requests==2.18.4和certifi==2018.1.18运行一个简单的请求时,一切都很好

代码语言:javascript
复制
$ pip freeze | grep "requests"
requests==2.18.4
requests-mock==0.6.0
requests-oauthlib==0.4.2
$ pip freeze | grep "certifi"
certifi==2018.1.18
$ openssl version
OpenSSL 1.0.2g  1 Mar 2016
$ python
Python 3.4.3 (default, Mar  7 2018, 11:51:27) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.utils.DEFAULT_CA_BUNDLE_PATH
'/PATH/TO/APP/venv/lib/python3.4/site-packages/certifi/cacert.pem'
>>> requests.get('https://google.com')
<Response [200]>
>>> 

但是,在不同的远程服务器上,安装了相同的库(在本地安装了过时的证书),我的请求行为完全不同:

远程服务器(centos 6.6)

代码语言:javascript
复制
$ pip freeze | grep "requests"
requests==2.18.4
requests-mock==0.6.0
requests-oauthlib==0.8.0
$ pip freeze | grep "certifi"
certifi==2018.1.18
$ openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
$ python
Python 3.4.3 (default, Apr  7 2015, 17:44:40) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-11)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.utils.DEFAULT_CA_BUNDLE_PATH
'/PATH/TO/APP/venv/lib/python3.4/site-packages/certifi/cacert.pem'
>>> requests.get('https://google.com')
...
requests.exceptions.SSLError: HTTPSConnectionPool(host='google.com', port=443): Max retries exceeded with url: / (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:600)'),))

在我运行时也会发生相同的错误:

代码语言:javascript
复制
requests.get('https://google.com', verify=requests.utils.DEFAULT_CA_BUNDLE_PATH)

我(也许不正确)的假设是,这是由于远程系统过时的openssl库所致。如果是这样的话,这让我感到惊讶,因为我认为请求使用的是证书CA证书包,这是这两个系统上的最新版本。

换句话说,如果我使用库,那么我在我的系统上安装了什么版本的OpenSSL (如果它确实重要的话),这有什么关系呢?在python 3.4.3?

注意事项

1)升级我的系统的cert数据库有点困难,因为我的组织处理包管理的方式,我的印象是,我们使用的证书库,这是不必要的。

2)我知道我可以禁用SSL验证,甚至可以通过verify=___调用带有有效证书文件路径的verify=___。但是,在本地使用的第三方库中没有此控件,这些库也会遇到相同的错误。我更希望在不添加参数的情况下运行一个普通的requests.get("https://google.com")命令。

EN

回答 1

Stack Overflow用户

发布于 2022-02-04 14:11:02

我对ssl失败也有类似的问题。当我从PyPi添加python-证书- went 32模块时,我的问题就消失了。“此包修补程序在运行时验证还包括来自windows证书存储区的证书。”我相信这可能是在OSx上安装“OSx”的Windows版本。(touched on here)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49199780

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档