2015-04-05 13 views
7

Ich versuche, eine Web-Schnittstelle zu Mock-up eine erholsame Schnittstelle auf Netzwerkgerät erstellen dieses Netzwerkgerät verwendet Digest-Authentifizierung und HTTPS. Ich habe herausgefunden, wie Digest Authentication in den Webserver integriert werden kann, aber ich kann nicht herausfinden, wie https mit FLASK zu bekommen, wenn Sie mir zeigen, wie bitte kommentieren, was ich mit dem Code unten tun müsste, um dies zu ermöglichen.können Sie HTTPS-Funktionalität zu einem Python-flash-Webserver hinzufügen?

+0

http://flask.pooco.org/snippets/111/ –

Antwort

3

dies funktioniert auch in eine Prise

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 hat POODLE-Schwachstelle. Ändern Sie es zu TSL – OWADVL

+0

Folgen Sie diesem Link: http://flask.pocoo.org/snippets/111/ Am Ende der Seite erklärt ein Kommentar, wie man in TSL ändert. –

8

Stellen Sie Flask auf einem echten Webserver und nicht mit dem integrierten (Entwicklungs-) Server bereit.

Siehe die Deployment Options chapter der Flask-Dokumentation. Server wie Nginx und Apache können beide HTTPS-Server anstatt HTTP-Server für Ihre Site einrichten.

Die aufgeführten eigenständigen WSGI-Server werden normalerweise in einer Proxyweiterleitungskonfiguration hinter Nginx und Apache bereitgestellt, wobei der Front-End-Server die SSL-Verschlüsselung für Sie weiterhin verarbeitet.

+0

Wenn Sie mod_wsgi-express (https://pypi.python.org/pypi/mod_wsgi) verwenden, bietet es eine einfache Möglichkeit, eine Site mit zu starten HTTPS, plus verfügt über integrierte Funktionen zur Handhabung des Digest-Authentifizierungsprotokolls auf Web-Server-Ebene. Schlage vor, dass du in der mod_wsgi Mailingliste danach fragst, da StackOverflow kein Diskussionsforum ist und daher nicht so einfach erklärt werden kann. –

+0

danke Jungs werden tun – robm

+0

@Martijn Pieters, Könnten Sie bitte erklären, warum wir "Flask auf einem echten Webserver, anstatt mit dem integrierten (Entwicklung) Server bereitstellen soll."? Danke –

6

Verwenden Sie diesen Code

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) 

Niemals openssl oder pyopenssl seine jetzt obselete werden in Python

+1

Um 'local.crt' und' local.key' zu erzeugen, siehe Methode 2 von: http: // kracekumar.com/post/54437887454/ssl-for-flask-lokale-entwicklung – andyandy

+0

seltsam, es läuft bei 'http: //127.0.0.1: 5000 /'. soll das nicht auf sicherem http laufen. Ich kann immer noch bei "http: //127.0.0.1: 5000 /' "abholen – prayagupd

1

Wenn dieser Webserver ist nur für Test- und Demonstrationszwecke. Sie können auch ngrok verwenden, eine Open Source, die Ihren HTTP-Verkehr durchtunnelt.

Im Grunde erstellt ngrok eine öffentliche URL (sowohl http als auch https) und leitet dann den Datenverkehr an den Port, auf dem der Flask-Prozess läuft.

https://ngrok.com/product

Es dauert nur ein paar Minuten bis zu setzen. Sie müssen zuerst die Software herunterladen. Dann führen Sie den Befehl
./ngrok http [Portnummer Ihres Python Prozess läuft]

Es wird dann ein Fenster in Terminal öffnen Ihnen sowohl eine http geben und https-URL Ihren Web-App zuzugreifen.

Verwandte Themen