NETSH - как привязать SSL-сертификат к порту и передать трафик приложению?
На Windows Server 2016
У меня есть простой веб-сервер Python (в колбе). Он отлично работает и прослушивает порт 80 (или что-то еще, что я настраиваю для прослушивания).
Мне нужно обслужить это по SSL.
У меня есть хороший сертификат, и я импортировал его в магазин Computer/personal cert.
Затем я побежал:
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 перед произвольным веб-сервером?
2 ответа
Ответ: Забудьте 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
конфигурации. Я предполагаю, что то же самое относится и к Flask, и есть особый способ ссылаться на эти файлы, чтобы он обслуживал трафик через HTTPS.
Быстрый веб-поиск "python flask ssl", кажется, дает некоторые обнадеживающие результаты:
- Как обслуживать HTTPS прямо из Flask
- Можете ли вы добавить функциональность HTTPS на веб-сервер с питоном?
Консенсус, кажется, вращается вокруг создания экземпляра SSL.Context
который ссылается на сертификат и ключ и передает его в качестве аргумента app.run
,