Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 如何向flask添加安全上下文?_Python 3.x_Ssl_Flask - Fatal编程技术网

Python 3.x 如何向flask添加安全上下文?

Python 3.x 如何向flask添加安全上下文?,python-3.x,ssl,flask,Python 3.x,Ssl,Flask,我试图向一个简单的flask应用程序添加一个安全上下文 import flask import ssl app = flask.Flask(__name__) @app.route('/', methods=['GET']) def home(): return "<h1>THIS IS HOME</h1>" ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2) ctx.load_cert_chain('crt-key-c

我试图向一个简单的flask应用程序添加一个安全上下文

import flask
import ssl

app = flask.Flask(__name__)


@app.route('/', methods=['GET'])
def home():
    return "<h1>THIS IS HOME</h1>"


ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
ctx.load_cert_chain('crt-key-crs/download-system.crt', 'crt-key-crs/download-system.key')

if __name__ == '__main__':
    app.run(debug=True, use_reloader=False, ssl_context=ctx)

在这之后,知道apply已从python3.x中完全删除,我使用python2.7.9运行我的应用程序,以检查在修改该行时是否出错,显然我没有,因为同样的错误再次发生。那么,为了在flask应用程序中使用安全上下文,我需要在代码中做什么或做什么更改呢?提前感谢。

经过大量搜索和测试,我发现代码还可以,问题是Werkzeug服务器的版本。我用
sudopip3安装Werkzeug进行了升级,现在它运行良好

在Werkzeug于2015年1月30日发布的0.10.0的变更日志评论中:“对于内置服务器(问题
#434
),使用stdlib
ssl
模块而不是
OpenSSL
)。这意味着不再支持OpenSSL上下文,而是从stdlib使用
ssl.SSLContext
。”因此,要使用python stdlib ssl,您需要Werkzeug版本0.10.0或更高版本
Traceback (most recent call last):
  File "flask-test.py", line 16, in <module>
    app.run(debug=True, use_reloader=False, ssl_context=ctx)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 772, in run
    run_simple(host, port, self, **options)
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 710, in run_simple
    inner()
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 692, in inner
    passthrough_errors, ssl_context).serve_forever()
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 486, in make_server
    passthrough_errors, ssl_context)
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 425, in __init__
    self.socket = tsafe.Connection(ssl_context, self.socket)
  File "/usr/lib/python3/dist-packages/OpenSSL/tsafe.py", line 11, in __init__
    self._ssl_conn = apply(_ssl.Connection, args)
NameError: name 'apply' is not defined
Traceback (most recent call last):
  File "flask-test.py", line 16, in <module>
    app.run(debug=True, use_reloader=False, ssl_context=ctx)
  File "/usr/lib/python3/dist-packages/flask/app.py", line 772, in run
    run_simple(host, port, self, **options)
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 710, in run_simple
    inner()
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 692, in inner
    passthrough_errors, ssl_context).serve_forever()
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 486, in make_server
    passthrough_errors, ssl_context)
  File "/usr/lib/python3/dist-packages/werkzeug/serving.py", line 425, in __init__
    self.socket = tsafe.Connection(ssl_context, self.socket)
  File "/usr/lib/python3/dist-packages/OpenSSL/tsafe.py", line 11, in __init__
    self._ssl_conn = _ssl.Connection(*args)
  File "/usr/lib/python3/dist-packages/OpenSSL/SSL.py", line 804, in __init__
    raise TypeError("context must be a Context instance")
TypeError: context must be a Context instance