首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何更新cacerts.txt of httplib2?

如何更新cacerts.txt of httplib2?
EN

Stack Overflow用户
提问于 2013-09-01 11:01:05
回答 3查看 5.7K关注 0票数 7

我正在尝试在httplib2中使用Github。但是,当我向它的端点提出请求时,它会给出以下错误:

代码语言:javascript
复制
import httplib2
h = httplib2.Http()
h.request('https://api.github.com/gists')
# OUT: Traceback (most recent call last):
# OUT:   File "<input>", line 1, in <module>
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1570, in request
# OUT:     (response, content) = self._request(conn, authority, uri, request_uri, method, body, headers, redirections, cachekey)
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1317, in _request
# OUT:     (response, content) = self._conn_request(conn, request_uri, method, body, headers)
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1252, in _conn_request
# OUT:     conn.connect()
# OUT:   File "/usr/local/lib/python2.7/dist-packages/httplib2/__init__.py", line 1044, in connect
# OUT:     raise SSLHandshakeError(e)
# OUT: SSLHandshakeError: [Errno 1] _ssl.c:504: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

我可以使用以下解决办法:

代码语言:javascript
复制
h = httplib2.Http(disable_ssl_certificate_validation=True)
h.request('https://api.github.com/gists')
# OUT: ({'content-length': '58443' ...

但是,这仍然是一个解决办法,我想知道如何使用httplib2正确地验证Github的SSL证书。搜索谷歌,我发现我应该更新那个库的cacerts.txt,但不知道如何更新,也不知道在哪里可以获得Github的证书授权。或者,是否有其他正确的方式通过https发送请求,而不存在证书验证问题?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-09-02 04:24:23

UPD:最简单的方法是在火狐中打开GitHub,查看页面信息-> Details -> Export->作为PEM文件。同时,使用请求也更好。

从火狐提供的有关https连接的信息中,我发现GitHub的证书是"DigiCert高级保证EV根CA",可以在这里找到:http://curl.haxx.se/ca/cacert.pem

证书文本可以粘贴到httplib2.__path__ + '/cacerts.txt',或者保存到单独的文件中,而http连接应该用以下方式创建:

代码语言:javascript
复制
h = httplib2.Http(ca_certs='/path/to/that/file')

这里也有关于这个主题的有用文章。

票数 4
EN

Stack Overflow用户

发布于 2018-05-24 05:50:20

只需通过以下方式更新httplib2包

代码语言:javascript
复制
pip install --upgrade httplib2

或者您可以直接替换cacerts.txt这个文件https://github.com/httplib2/httplib2/blob/master/python2/httplib2/cacerts.txt

另外,如果您使用boto.txt文件,那么您可能会使用类似于boto.txt的

代码语言:javascript
复制
ca_certificates_file = /etc/ssl/certs/ca-bundle.crt <--- location of your system cert

也可以通过以下方式指定httplib2 cacerts.txt文件

代码语言:javascript
复制
ca_certificates_file = /usr/local/lib/python2.7/dist-packages/httplib2/python2/httplib2/cacerts.txt
票数 1
EN

Stack Overflow用户

发布于 2022-08-26 21:16:10

从httplib2版本0.12开始,您可以使用环境变量指定自定义证书路径:

代码语言:javascript
复制
export HTTPLIB2_CA_CERTS="\path\to\your\CA_certs_bundle"

正如我在相似问题中提到的那样,当您不在代码中直接使用httplib2时,这是非常有用的,但是它是作为一个传递依赖关系存在的,并且不能使用ca_cert函数参数。

不幸的是,除了在Changelog和实际的拉请求中偶尔提到之外,他们选择不在任何地方记录这个文档。

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

https://stackoverflow.com/questions/18557744

复制
相关文章

相似问题

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