Python tornado HTTPClient出现SSL错误

Python tornado HTTPClient出现SSL错误,python,ssl,tornado,Python,Ssl,Tornado,我正在尝试使用tornado的http客户端获取URL。我以前做过很多次,但这次我遇到了一个非常奇怪的SSL错误。我试图使用的端点没有有效的证书,但是curl调用中的a-k仍然证明它是有效的 $ curl https://myhostname.com:9001 curl: (60) SSL certificate problem, verify that the CA cert is OK. Details: error:14090086:SSL routines:SSL3_GET_SERVER

我正在尝试使用tornado的http客户端获取URL。我以前做过很多次,但这次我遇到了一个非常奇怪的SSL错误。我试图使用的端点没有有效的证书,但是curl调用中的a-k仍然证明它是有效的

$ curl https://myhostname.com:9001
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

$ curl https://myhostname.com:9001 -k
404 page not found
我在网上找到的所有答案都只是建议将validate_cert设置为False(我已经在这么做了)。但是,当我尝试做我认为在tornado的httpclient(validate\u cert=False)中等效的事情时,我仍然会得到一个非常奇怪的错误。下面是一段中断的测试代码:

import tornado.httpclient

request = tornado.httpclient.HTTPRequest(
    url="https://myhostname.com:9001",
    method="GET",
    validate_cert=False
)
print tornado.httpclient.HTTPClient().fetch(request)
结果如下:

WARNING:tornado.general:SSL Error on 6 ('myhostname.com', 9001): [Errno 1] _ssl.c:499: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
Traceback (most recent call last):
  File "./test.py", line 17, in <module>
    make_call()
  File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/gen.py", line 140, in wrapper
    result = func(*args, **kwargs)
  File "./test.py", line 13, in make_call
    response = tornado.httpclient.HTTPClient().fetch(request)
  File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/httpclient.py", line 85, in fetch
    self._async_client.fetch, request, **kwargs))
  File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/ioloop.py", line 370, in run_sync
    return future_cell[0].result()
  File "/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site-packages/tornado-3.1-py2.7.egg/tornado/concurrent.py", line 65, in result
    raise self._exception
tornado.httpclient.HTTPError: HTTP 599: [Errno 1] _ssl.c:499: error:1407742E:SSL routines:SSL23_GET_SERVER_HELLO:tlsv1 alert protocol version
警告:tornado.general:6('myhostname.com',9001):[Errno 1]\u SSL.c:499:Error:1407742E:SSL例程:SSL23\u GET\u SERVER\u HELLO:tlsv1警报协议版本
回溯(最近一次呼叫最后一次):
文件“/test.py”,第17行,在
打电话
文件“/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site packages/tornado-3.1-py2.7.egg/tornado/gen.py”,第140行,在包装器中
结果=函数(*args,**kwargs)
文件“/test.py”,make_call中的第13行
response=tornado.httpclient.httpclient().fetch(请求)
文件“/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site packages/tornado-3.1-py2.7.egg/tornado/httpclient.py”,第85行,在fetch中
self.\u async\u client.fetch,request,**kwargs))
文件“/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site packages/tornado-3.1-py2.7.egg/tornado/ioloop.py”,第370行,运行同步
返回未来_单元格[0]。结果()
文件“/Users/kaleb.pomeroy/workspace/lefty/dashboard/lib/python2.7/site packages/tornado-3.1-py2.7.egg/tornado/concurrent.py”,结果第65行
提出自己的意见
tornado.httpclient.HTTPError:HTTP 599:[Errno 1]\u ssl.c:499:error:1407742E:ssl例程:SSL23\u GET\u SERVER\u HELLO:tlsv1警报协议版本
不幸的是,我的端点不是公共的,所以我无法提供生成此错误所使用的确切代码

有没有人看到这个错误,或者有解决方法


谢谢

这看起来可能与当时的逻辑有关 已知的一个问题是,
tornado.simple\u httpclient
在连接到Python 2.6上的某些服务器时遇到问题,这看起来像是相同的错误消息,但我以前在Python 2.7上没有看到过这种故障


尝试将
ssl\u options={“ssl\u version”:ssl.PROTOCOL\u TLSv1}
传递给HTTP请求。您还可以尝试
tornado.curl\u httpclient
以获得一个替代实现,该实现更有可能处理不太常见的服务器配置。

这看起来可能与 已知的一个问题是,
tornado.simple\u httpclient
在连接到Python 2.6上的某些服务器时遇到问题,这看起来像是相同的错误消息,但我以前在Python 2.7上没有看到过这种故障

尝试将
ssl\u options={“ssl\u version”:ssl.PROTOCOL\u TLSv1}
传递给HTTP请求。您还可以尝试使用
tornado.curl\u httpclient
作为替代实现,它更有可能处理不太常见的服务器配置