¿Se puede agregar la funcionalidad HTTPS a un servidor web de Python Flask?

Estoy tratando de construir una interfaz web para simular una interfaz tranquila en un dispositivo de red, este dispositivo de red utiliza Autenticación Digestiva y HTTPS. Descubrí cómo integrar la Autenticación Digest en el servidor web, pero parece que no puedo descubrir cómo obtener https usando FLASK si puedes mostrarme cómo hacer un comentario sobre lo que tendría que hacer con el código a continuación para que esto suceda.

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

esto también funciona en un apuro

 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) 

Código

 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) 

Nunca uses openssl o pyopenssl, ahora se vuelven obsoletos en python

Implemente Flask en un servidor web real, en lugar de con el servidor incorporado (de desarrollo).

Vea el capítulo de Opciones de Implementación de la documentación de Flask. Los servidores como Nginx y Apache pueden manejar la configuración de servidores HTTPS en lugar de servidores HTTP para su sitio.

Los servidores WSGI independientes que se enumeran normalmente se implementarán detrás de Nginx y Apache en una configuración de reenvío de proxy, donde el servidor de aplicaciones para el usuario maneja el cifrado SSL para usted todavía.

  • Para ejecutar la funcionalidad https o la autenticación SSL en la aplicación del matraz, primero instale el paquete python “pyOpenSSL” utilizando:

      pip install pyopenssl 
  • El siguiente paso es crear ‘cert.pem’ y ‘key.pem’ usando el siguiente comando en el terminal:

      openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365 
  • Copie ‘cert.pem’ y ‘kem.pem’ generados en su proyecto de aplicación matraz

  • Agregue ssl_context = (‘cert.pem’, ‘key.pem’) en app.run ()

Por ejemplo:

  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 este servidor web es sólo para fines de prueba y demostración. Puede usar ngrok, un código abierto también que canaliza su tráfico http.

Básicamente, ngrok crea una URL pública (http y https) y luego canaliza el tráfico a cualquier puerto en el que se esté ejecutando el proceso de Flask.

https://ngrok.com/product

Sólo toma un par de minutos para configurar. Primero tienes que descargar el software. A continuación, ejecute el comando
./ngrok http [número de puerto en el que se está ejecutando el proceso de Python]

Luego abrirá una ventana en el terminal que le dará una URL http y https para acceder a su aplicación web.