1

tornado の http クライアントを使用して URL を取得しようとしています。これまで何度もこれを行ってきましたが、今回は非常に奇妙な SSL エラーが発生します。私が消費しようとしているエンドポイントには有効な証明書がありませんが、curl 呼び出しで -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_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

残念ながら、私のエンドポイントは公開されていないため、このエラーを生成するために使用している正確なコードを提供することはできません.

誰かがこのエラーを見たことがありますか、または解決策がありますか?

ありがとう

4

1 に答える 1

1

これは、 https://github.com/facebook/tornado/blob/fd4d8997a7728​​29b8439322dbce45091bc51beaf/tornado/simple_httpclient.py#L196のロジックに関連しているようです。これはtornado.simple_httpclient、Python 2.6 で特定のサーバーに接続でき ないという既知の問題であり、これは同じエラー メッセージのように見えますが、Python 2.7 でこのエラーが発生したことはありません。

ssl_options={"ssl_version": ssl.PROTOCOL_TLSv1}HTTP リクエストに渡してみてください。tornado.curl_httpclientあまり一般的でないサーバー構成を処理する可能性が高い代替実装を試すこともできます。

于 2013-09-26T04:41:54.233 に答える