2015-02-18 32 views
23

Próbuję skonfigurować serwer Flask, który używa kontekstu OpenSSL. Ponieważ jednak przeniosłem skrypt na inny serwer, ciągle zgłaszam następujący błąd, niezależnie od tego, czy używam Pythona 2.7, czy 3.4 i niezależnie od wybranej przeze mnie metody SSL (SSLv23/TLSv1/...):AttributeError: Obiekt 'Context' nie ma atrybutu 'wrap_socket'

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' 

Kod według poniżej:

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) 

Dziękuję bardzo z góry! Cieszę się z wszelkiej pomocy

Odpowiedz

54

Począwszy od 0.10, Werkzeug nie obsługuje już kontekstów OpenSSL. Ta decyzja została podjęta, ponieważ łatwiej jest wspierać ssl.SSLContext w różnych wersjach Pythona. Twoja opcja ponownego napisania tego kodu jest następująca:

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

Dla wszystkich możliwości patrz http://werkzeug.pocoo.org/docs/0.10/serving/.

+8

Ważne jest, aby pamiętać, że kolejność 'crt' i' key' w 'kontekstowym' tuple maters. –

+3

Otrzymanie tego błędu: "obiekt" krotki "nie ma atrybutu" wrap_socket "' – andrei