web-dev-qa-db-ja.com

AttributeError: 'Context'オブジェクトには属性 'wrap_socket'がありません

OpenSSLコンテキストを使用するFlaskサーバーを設定しようとしています。ただし、別のサーバーにスクリプトを移動したため、=を使用していても、次のエラーがスローされますPython 2.7または3.4で、選択したSSLメソッド(SSLv23/TLSv1/...)に関係なく:

  File "/usr/lib/python3.4/threading.py", line 920, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.4/threading.py", line 868, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 602, in inner
    passthrough_errors, ssl_context).serve_forever()
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 506, in make_server
    passthrough_errors, ssl_context)
  File "/usr/local/lib/python3.4/dist-packages/werkzeug/serving.py", line 450, in __init__
    self.socket = ssl_context.wrap_socket(self.socket,
AttributeError: 'Context' object has no attribute 'wrap_socket'

以下の対応コード:

if __name__ == "__main__":
        context = SSL.Context(SSL.SSLv23_METHOD)
        context.use_privatekey_file('key.key')
        context.use_certificate_file('cert.crt')
        app.run(Host='0.0.0.0', port=80, ssl_context=context, threaded=True, debug=True)

事前にどうもありがとうございました!私は助けてくれて幸せです

28
Nils Milchert

0.10現在、WerkzeugはOpenSSLコンテキストをサポートしていません。この決定は、サポートが容易であるために行われました ssl.SSLContext 全体Pythonバージョン。このコードを書き換えるオプションは次のとおりです。

if __name__ == "__main__":
    context = ('cert.crt', 'key.key')
    app.run(Host='0.0.0.0', port=80, ssl_context=context, threaded=True, debug=True)

http://werkzeug.pocoo.org/docs/latest/serving/ をご覧ください。

70