rob*_*obm 32 python rest https flask
我正在尝试构建一个Web界面,以便在网络设备上模拟一个安静的界面,这个网络设备使用摘要式身份验证和HTTPS.我想出了如何将摘要式身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以告诉我如何评论我需要使用下面的代码来实现这一点.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return 'Flask is running!'
@app.route('/data')
def names():
data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
return jsonify(data)
if __name__ == '__main__':
app.run()
Run Code Online (Sandbox Code Playgroud)
小智 24
这也适用于紧要关头
from flask import Flask, jsonify
from OpenSSL import SSL
context = SSL.Context(SSL.PROTOCOL_TLSv1_2)
context.use_privatekey_file('server.key')
context.use_certificate_file('server.crt')
app = Flask(__name__)
@app.route('/')
def index():
return 'Flask is running!'
@app.route('/data')
def names():
data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
return jsonify(data)
#if __name__ == '__main__':
# app.run()
if __name__ == '__main__':
app.run(host='127.0.0.1', debug=True, ssl_context=context)
Run Code Online (Sandbox Code Playgroud)
ana*_*thi 19
码
from flask import Flask, jsonify
import os
ASSETS_DIR = os.path.dirname(os.path.abspath(__file__))
app = Flask(__name__)
@app.route('/')
def index():
return 'Flask is running!'
@app.route('/data')
def names():
data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
return jsonify(data)
if __name__ == '__main__':
context = ('local.crt', 'local.key')#certificate and key files
app.run(debug=True, ssl_context=context)
Run Code Online (Sandbox Code Playgroud)
永远不要使用openssl或pyopenssl它现在成为python中的obselete
Eve*_*ews 12
对于快速的脏自签名证书,您还可以使用flask run --cert adhoc或设置FLASK_RUN_CERTenv var。
$ export FLASK_APP="app.py"
$ export FLASK_ENV=development
$ export FLASK_RUN_CERT=adhoc
$ flask run
* Serving Flask app "app.py" (lazy loading)
* Environment: development
* Debug mode: on
* Running on https://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 329-665-000
Run Code Online (Sandbox Code Playgroud)
该adhoc选项没有很好的文档记录(有充分的理由,永远不要在生产中这样做),但在cli.py 源代码 中提到了它。
Miguel Grinberg在Running Your Flask Application Over HTTPS中对此进行了彻底的解释。
Mar*_*ers 10
在真实的Web服务器上部署Flask,而不是使用内置(开发)服务器.
请参阅Flask文档的" 部署选项"一章.像Nginx和Apache这样的服务器都可以处理为您的站点设置HTTPS服务器而不是HTTP服务器.
列出的独立WSGI服务器通常会在代理转发配置中部署在Nginx和Apache之后,前端服务器仍为您处理SSL加密.
小智 9
要在flask应用程序中运行https功能或SSL身份验证,请首先使用以下命令安装“ pyOpenSSL” python软件包:
pip install pyopenssl
Run Code Online (Sandbox Code Playgroud)下一步是在终端上使用以下命令创建“ cert.pem”和“ key.pem”:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Run Code Online (Sandbox Code Playgroud)在烧瓶应用程序项目中复制生成的“ cert.pem”和“ kem.pem”
在app.run()中添加ssl_context =('cert.pem','key.pem')
例如:
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/')
def index():
return 'Flask is running!'
@app.route('/data')
def names():
data = {"names": ["John", "Jacob", "Julie", "Jennifer"]}
return jsonify(data)
if __name__ == '__main__':
app.run(ssl_context=('cert.pem', 'key.pem'))
Run Code Online (Sandbox Code Playgroud)
如果此网络服务器仅用于测试和演示目的。您可以使用 ngrok,它也是一个开源的隧道,用于传输您的 http 流量。
基本上,ngrok 创建一个公共 URL(http 和 https),然后将流量隧道传输到 Flask 进程正在运行的任何端口。
只需几分钟即可完成设置。您首先必须下载该软件。然后运行命令
./ngrok http [你的 python 进程正在运行的端口号]
然后它会在终端中打开一个窗口,为您提供 http 和 https url 来访问您的网络应用程序。
得分最高的答案有正确的想法,但 API 似乎已经发展到不再像 2015 年首次编写时那样有效。
代替这个:
from OpenSSL import SSL
context = SSL.Context(SSL.PROTOCOL_TLSv1_2)
context.use_privatekey_file('server.key')
context.use_certificate_file('server.crt')
Run Code Online (Sandbox Code Playgroud)
我在 Python 3.7.5 中使用了这个:
import ssl
context = ssl.SSLContext()
context.load_cert_chain('fullchain.pem', 'privkey.pem')
Run Code Online (Sandbox Code Playgroud)
然后在Flask.run调用中提供 SSL 上下文,因为它说:
app.run(…, ssl_context=context)
Run Code Online (Sandbox Code Playgroud)
(我的server.crt文件被称为fullchain.pem,我的文件被server.key称为privkey.pem。这些文件是由我的 LetsEncrypt Certbot 提供给我的。)
超级简单:
应用程序.py
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
Run Code Online (Sandbox Code Playgroud)
跑步:
$ openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
$ flask run --cert=cert.pem --key=key.pem
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52954 次 |
| 最近记录: |