2015-04-05 38 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應用程序。

相關問題