Можете ли вы добавить функциональность HTTPS на веб-сервер флипсы python?

Я пытаюсь создать веб-интерфейс для создания загрузочного интерфейса на сетевом устройстве, которое использует сетевое устройство с помощью Digest Authentication и HTTPS. Я понял, как интегрировать дайджест-аутентификацию на веб-сервер, но я не могу понять, как получить https с помощью FLASK, если вы можете показать мне, как прокомментировать, что мне нужно сделать с приведенным ниже кодом, чтобы это произошло.

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

Ответ 1

это также работает в крайнем случае

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)

Ответ 2

Код

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, теперь он становится устаревшим в python

Ответ 3

Разверните Flask на реальном веб-сервере, а не на встроенном сервере (для разработки).

См. Главу "Параметры развертывания" документации Flask. Серверы, такие как Nginx и Apache, могут управлять настройкой HTTPS-серверов, а не HTTP-серверов для вашего сайта.

Перечисленные автономные серверы WSGI обычно развертываются за Nginx и Apache в конфигурации с пересылкой прокси, где интерфейсный сервер по-прежнему обрабатывает шифрование SSL для вас.

Ответ 4

  • Чтобы запустить функцию https или аутентификацию SSL в приложении фляги, вы сначала устанавливаете пакет python "pyOpenSSL", используя:

     pip install pyopenssl
    
  • Следующим шагом является создание 'cert.pem' и 'key.pem' с помощью следующей команды на терминале:

     openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365
    
  • Скопируйте сгенерированные файлы cert.pem и kem.pem в проект приложения колбы

  • Добавьте ssl_context = ('cert.pem', 'key.pem') в app.run()

Например:

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

Ответ 5

Если этот веб-сервер предназначен только для тестирования и демонстрации. Вы можете использовать ngrok, открытый источник, который туннелирует ваш трафик http.

Bascially ngrok создает общедоступный URL (как http, так и https), а затем туннелирует трафик на любой порт, на котором запущен процесс Flask.

https://ngrok.com/product

Для настройки требуется всего пару минут. Сначала вам нужно скачать программное обеспечение. Затем запустите команду
. /ngrok http [номер порта, на котором запущен ваш процесс python]

Затем он откроет окно в терминале, предоставляя вам как http, так и https-url для доступа к вашему веб-приложению.