SSLError:握手错误,Python请求

虚无

我正在使用使用Ebay python sdk的Ebay Trading API,该API最终会发出python请求以进行API调用。

一切都很好,但是自最近几天以来,我无法拨打电话。我收到错误消息:

SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)

这是完整的回溯:

In [9]: response = api.execute('GetSessionID', data)
---------------------------------------------------------------------------
SSLError                                  Traceback (most recent call last)
<ipython-input-9-eb33610c2a7f> in <module>()
----> 1 response = api.execute('GetSessionID', data)

/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/ebaysdk/connection.pyc in execute(self, verb, data, list_nodes, verb_attrs, files)
    117
    118         self.build_request(verb, data, verb_attrs, files)
--> 119         self.execute_request()
    120
    121         if hasattr(self.response, 'content'):

/home/debian/.virtualenvs/goplaces/local/lib/python2.7/site-packages/ebaysdk/connection.pyc in execute_request(self)
    182             proxies=self.proxies,
    183             timeout=self.timeout,
--> 184             allow_redirects=True
    185         )
    186

/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/requests/sessions.pyc in send(self, request, **kwargs)
    574
    575         # Send the request
--> 576         r = adapter.send(request, **kwargs)
    577
    578         # Total elapsed time of the request (approximately)

/home/debian/.virtualenvs/myvirtualenv/local/lib/python2.7/site-packages/requests/adapters.pyc in send(self, request, stream, timeout, verify, cert, proxies)
    431         except (_SSLError, _HTTPError) as e:
    432             if isinstance(e, _SSLError):
--> 433                 raise SSLError(e, request=request)
    434             elif isinstance(e, ReadTimeoutError):
    435                 raise ReadTimeout(e, request=request)

SSLError: bad handshake: Error([('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')],)

在StackOverflow上有许多相关的问题,这些问题都表明:

  1. 通过参数verify = False
  2. 通过CA证书
  3. 将您的CA证书附加到cacert.pem文件中(我尝试了此操作,没有用)

我不能这样做是因为:

  1. 我的虚拟环境中的第三方库正在调用请求。
  2. 从安全角度来看,这是不好的。

还,

  1. 我可以使用请求在同一virtualenv中进行其他TSL调用(例如,亚马逊市场api),而不会导致握手失败或任何其他SSL错误。
  2. Ebay SDK在我的本地系统(Mac OsX)上运行良好,仅与生产服务器(Google Cloud / Debian)有关
  3. chrome在我的域上没有报告SSL错误

我不知道为什么会这样。

SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed'当我禁用SSL3时,为什么要追溯。(我对SSL没有深入的了解)。

谢谢!

编辑:

# openssl version
OpenSSL 1.0.2e 3 Dec 2015

通过@Steffen Ullrich的建议从源代码构建,从1.0.1升级到openssl 1.0.2。

$ pip freeze | grep -i ssl
backports.ssl-match-hostname==3.4.0.2
pyOpenSSL==0.15.1
斯蒂芬·乌尔里希(Steffen Ullrich)

我的猜测是这与Python Urllib2 SSL错误有关,即OpenSSL的基础实现中存在多个信任路径的问题。有关问题的详细信息,请参见此处。

要解决此问题而不更改可信任的CA,您需要具有固定的OpenSSL,即OpenSSL 1.0.2。或者,您可以将一些较旧的CA证书添加回您的信任库。

  1. 通过参数verify = False
  2. 通过CA证书
  3. 将您的CA证书附加到cacert.pem文件中(我尝试了此操作,没有用)

...从安全角度来看这很糟糕。

虽然verify=False由于禁用验证对安全性不利,但其他选项也不错,因为它们仅添加其他信任锚,但使验证保持启用状态。

当我禁用SSL3时,为什么要追溯SSL例程,“ SSL3_GET_SERVER_CERTIFICATE”,“证书验证失败”。

即使它谈论SSLv3,也并不意味着它。TLS和SSLv3共享许多功能,即TLS 1.0实际上是SSL 3.1。因此SSL3_*,OpenSSL代码中的许多功能也与TLS 1.x一起使用,这也会引起这些令人不快的消息。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python Django中的Websocket握手错误

来自分类Dev

SSL握手错误

来自分类Dev

Python:对Google Maps API的请求-握手问题

来自分类Dev

Python请求获取SSLerror

来自分类Dev

python请求SSLError

来自分类Dev

SSL错误:握手错误

来自分类Dev

SSLError:sslv3警报握手失败

来自分类Dev

OpenSSL :: SSL :: SSLError与Homebrew OpenSSL握手失败

来自分类Dev

OpenSSL错误-握手失败

来自分类Dev

OpenSSL错误-握手失败

来自分类Dev

Titan Gremlin Server给出错误“不是WebSocket握手请求:缺少升级”

来自分类Dev

向HTTP发出HTTP请求时发生错误->握手失败

来自分类Dev

Python 请求模块异常 SSLError

来自分类Dev

Python的SocketServer不会握手

来自分类Dev

SSL错误握手错误10054“ WSAECONNRESET”

来自分类Dev

Golang-TLS握手错误

来自分类Dev

SocketIO4Net握手错误

来自分类Dev

登录前握手期间发生错误

来自分类Dev

OpenSSL错误警报握手失败

来自分类Dev

PayPal IPN PHP握手错误

来自分类Dev

Websocket握手期间的Heroku错误503

来自分类Dev

Dapper“握手”数据库错误

来自分类Dev

偶然的小坚果握手错误

来自分类Dev

SocketIO4Net握手错误

来自分类Dev

握手错误或 ECONNRESET Azure Mysql Nodejs

来自分类Dev

Python 3:如何从服务器端记录SSL握手错误

来自分类Dev

Python 3:如何从服务器端记录SSL握手错误

来自分类Dev

Python请求中的SSLError(读取操作超时)

来自分类Dev

如何重用连接/请求以避免握手