В 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
Я не очень хорошо знаком с Flask. Но все остальные приложения python, которые я запускал в Windows и использующие SSL, напрямую ссылались на сертификат и файл ключа в формате PEM. Они вообще не взаимодействовали с хранилищем сертификатов Windows или нуждались в каких-либо netsh
config. Я предполагаю, что то же самое верно и для Flask, и есть особый способ ссылаться на эти файлы и передавать трафик через HTTPS.
Быстрый поиск в Интернете по запросу "python flask ssl" дает обнадеживающие результаты:
Похоже, что консенсус вращается вокруг создания экземпляра SSL.Context
который ссылается на сертификат и ключ и передает его в качестве аргумента в app.run
.