Можете ли вы добавить функциональность 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 для доступа к вашему веб-приложению.