web-dev-qa-db-fra.com

AttributeError: l'objet 'Context' n'a pas d'attribut 'wrap_socket'

J'essaie de configurer un serveur Flask qui utilise un contexte OpenSSL. Cependant, depuis que j'ai déplacé le script sur un autre serveur, il continue de générer l'erreur suivante, peu importe si j'utilise = Python 2.7 ou 3.4 et quelle que soit la méthode SSL que j'ai choisie (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'

Le code correspondant ci-dessous:

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)

Merci beaucoup d'avance! Je suis heureux pour toute aide

28
Nils Milchert

Depuis la version 0.10, Werkzeug ne prend plus en charge les contextes OpenSSL. Cette décision a été prise car il est plus facile de prendre en charge ssl.SSLContext sur Python. Votre option pour réécrire ce code est celle-ci:

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

Voir http://werkzeug.pocoo.org/docs/latest/serving/ pour toutes les possibilités.

70
Markus Unterwaditzer