2015-04-05 36 views
7

我正在尝试构建一个Web界面以模拟网络设备上的平静界面此网络设备使用摘要式身份验证和HTTPS。 我想出了如何将摘要身份验证集成到Web服务器中,但我似乎无法找到如何使用FLASK获取https,如果您可以告诉我如何评论我需要使用下面的代码来做到这一点。您可以将HTTPS功能添加到python烧瓶网络服务器吗?

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() 
+0

http://flask.pocoo.org/snippets/111/ – 2016-04-10 12:02:34

回答

3

这在紧要关头也适用

from flask import Flask, jsonify 


from OpenSSL import SSL 
context = SSL.Context(SSL.SSLv23_METHOD) 
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) 
+5

SSLv3具有POODLE漏洞。将其更改为TSL – OWADVL 2016-01-31 12:40:28

+0

以下链接:http://flask.pocoo.org/snippets/111/在页面末尾,注释说明如何更改为TSL。 – 2016-05-18 21:03:12

8

在真实的Web服务器上部署Flask,而不是使用内置(开发)服务器。

请参阅Flask文档的Deployment Options chapter。像Nginx和Apache这样的服务器都可以处理HTTPS服务器,而不是你网站的HTTP服务器。

列出的独立WSGI服务器通常会以代理转发配置部署在Nginx和Apache后面,其中前端服务器仍为您处理SSL加密。

+0

如果你使用mod_wsgi-express(https://pypi.python.org/pypi/mod_wsgi),它提供了一种简单的方式来运行一个网站HTTPS以及内置的在Web服务器级别处理摘要式身份验证协议的功能。建议你在mod_wsgi邮件列表上询问关于它的内容,因为StackOverflow不是一个讨论论坛,所以在这里不那么容易解释。 – 2015-04-05 20:58:48

+0

谢谢你们会做 – robm 2015-04-05 21:30:16

+0

@Martijn Pieters,你能解释一下为什么我们应该“在实际的Web服务器上部署Flask,而不是使用内置的(开发)服务器。”?谢谢 – 2017-05-09 12:58:39

6

使用此代码

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) 

切勿使用OpenSSL的或pyopenssl它现在已经成为蟒蛇

+1

要生成'local.crt'和'local.key',请参阅http:// kracekumar的方法2。com/post/54437887454/ssl-for-flask-local-development – andyandy 2017-06-20 16:42:51

+0

很奇怪,它运行在'http://127.0.0.1:5000 /'。是不是应该在安全的http上运行。我仍然可以在'http://127.0.0.1:5000 /'处获取 – prayagupd 2017-08-31 06:03:50

1

已废弃如果Web服务器是仅用于测试和演示目的。你也可以使用ngrok,这也是一个开源的隧道,可以传输你的http流量。

Bascially ngrok创建一个公共URL(包括http和https),然后将流量通过隧道传输到Flask进程所运行的任何端口。

https://ngrok.com/product

只需要几分钟成立。您首先必须下载该软件。然后运行命令
./ngrok http [您的python进程运行的端口号]

然后它会在终端中打开一个窗口,为您提供http和https url以访问您的web应用程序。

相关问题