AttributeError: объект "Context" не имеет атрибута "wrap socket"
Я пытаюсь настроить сервер Колб, который использует контекст OpenSSL. Однако, поскольку я переместил скрипт на другой сервер, он продолжает выдавать следующую ошибку, независимо от того, использую ли я 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)
большое спасибо заранее! Я рад любой помощи
1 ответов
начиная с 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/0.10/serving/ для всех возможностей.