2015-02-18 38 views
23

Tôi đang cố gắng thiết lập máy chủ Flask sử dụng ngữ cảnh OpenSSL. Tuy nhiên, vì tôi đã di chuyển tập lệnh trên một máy chủ khác, nó tiếp tục ném lỗi sau, bất kể tôi đang sử dụng Python 2.7 hay 3.4 và không có vấn đề gì về phương pháp SSL tôi đã chọn (SSLv23/TLSv1/...):AttributeError: đối tượng 'Context' không có thuộc tính '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' 

mã theo dưới đây:

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) 

Cảm ơn bạn rất nhiều trước! Tôi rất vui khi được giúp đỡ

Trả lời

54

Kể từ 0.10, Werkzeug không hỗ trợ các bối cảnh OpenSSL nữa. Quyết định này được đưa ra bởi vì nó dễ dàng hơn để hỗ trợ ssl.SSLContext trên các phiên bản Python. Tùy chọn viết lại mã này là mã:

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

Xem http://werkzeug.pocoo.org/docs/0.10/serving/ cho mọi khả năng.

+8

Điều quan trọng cần lưu ý là thứ tự của 'crt' và' khóa' trong phần tử 'bối cảnh'. –

+3

Nhận lỗi này: đối tượng 'tuple 'không có thuộc tính' wrap_socket'' – andrei

Các vấn đề liên quan