J'essaie de créer une interface Web pour simuler une interface reposante sur un périphérique réseau. Ce périphérique réseau utilise l'authentification Digest et HTTPS. J'ai compris comment intégrer l'authentification Digest au serveur Web mais je n'arrive pas à trouver comment obtenir https en utilisant FLASK si vous pouvez me montrer comment veuillez commenter ce que je devrais faire avec le code ci-dessous pour y arriver.
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()
cela fonctionne également dans une pincée
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)
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)
N'utilisez pas openssl ou pyopenssl c'est maintenant devenu obsolète en python
Déployez Flask sur un vrai serveur Web, plutôt qu'avec le serveur (de développement) intégré.
Voir le chapitre Options de déploiement de la documentation Flask. Des serveurs comme Nginx et Apache sont tous les deux peut gérer la configuration des serveurs HTTPS plutôt que des serveurs HTTP pour votre site.
Les serveurs WSGI autonomes répertoriés sont généralement déployés derrière Nginx et Apache dans une configuration de transfert de proxy, où le serveur frontal gère toujours le cryptage SSL pour vous.
Pour exécuter la fonctionnalité https ou l'authentification SSL dans l'application flask, vous devez d'abord installer "pyOpenSSL" python en utilisant:
pip install pyopenssl
L'étape suivante consiste à créer 'cert.pem' et 'key.pem' à l'aide de la commande suivante sur le terminal:
openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
Copiez 'cert.pem' et 'kem.pem' générés en vous flask project application
Ajoutez ssl_context = ('cert.pem', 'key.pem') dans app.run ()
Par exemple:
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'))
Si ce serveur Web est uniquement à des fins de test et de démonstration. Vous pouvez également utiliser ngrok, une source ouverte qui tunnelise votre trafic http.
Fondamentalement, ngrok crée une URL publique (à la fois http et https), puis tunnelise le trafic vers le port sur lequel votre processus Flask s'exécute).
La configuration ne prend que quelques minutes. Vous devez d'abord télécharger le logiciel. Exécutez ensuite la commande
./ ngrok http [numéro de port sur lequel votre processus python est en cours]]
Il ouvrira alors une fenêtre dans le terminal vous donnant à la fois une URL http et https pour accéder à votre application web.