web-dev-qa-db-fra.com

pouvez-vous ajouter la fonctionnalité HTTPS à un python flask serveur Web?

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()
26
robm

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)
20
RobM

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

17
anand tripathi

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.

10
Martijn Pieters
  • 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'))
8
vaishali chaudhari

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).

https://ngrok.com/product

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.

3
Hemanth Kondapalli