На Windows Server 2016
у меня есть простой веб-сервер на Python (в колбе). Он отлично работает и прослушивает порт 80 (или то, что я настроил для прослушивания).
Мне нужно обслуживать его через SSL.
У меня есть хороший сертификат, и я импортировал его в хранилище сертификатов компьютера / личного пользования .
Затем я запустил:
netsh http add sslcert ipport=0.0.0.0:443 certhash=8caef2be185a0c94d################ appid="{7E46BD40-39C6-4813-B414-019AD3332421}"
netsh http add urlacl url=https://+:443/ user=Everyone
Команды работают нормально. Я запускаю веб-сервер фляги на 443, но он работает в незашифрованном виде. Например,
https://host/ // fails, because the server is serving plain text
http://host:443 // works, because the traffic ain't ssl-ified
Как разрешить?
Чтобы прояснить: как решить, не касаясь кода фляги (мы не хотим помещать сертификат SSL в файловую систему, это небезопасно). Я считаю, что netsh можно использовать для прерывания SSL перед произвольным веб-сервером?
Ответ - Забудьте о netsh, не похоже, что это билет.
Мы решили, что используем IIS в качестве обратного прокси, как показано здесь:
https://developers.coveo.com/display/public/SearchREST/Configuring+HTTPS+Reverse+Proxy+in+IIS
и здесь
https://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis
Я не очень хорошо знаком с Флэском. Но каждое другое приложение питона, которое я запускал под Windows, которое использовало SSL, ссылалось непосредственно на PEM отформатированный сертификат и ключевой файл. Они вообще не взаимодействовали с хранилищем сертификатов Windows или нуждались в каких-либо netsh
настройках. Полагаю, то же самое относится и к Flask, и есть особый способ ссылаться на эти файлы, чтобы они обслуживали трафик по HTTPS.
Быстрый веб-поиск "python flask ssl", похоже, дает некоторые обнадеживающие результаты:
Похоже, что консенсус вращается вокруг создания экземпляра SSL.Context
, который ссылается на cert и ключ и передает его в качестве аргумента в app.run
.