No Windows Server 2016
Eu tenho um servidor web python simples (no frasco). Funciona muito bem e escuta na porta 80 (ou o que eu configurar para escutar).
Eu preciso servi-lo por SSL.
Eu tenho um bom certificado e o importei para o armazenamento de certificados pessoais/computador.
Então corri:
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
Os comandos rodam bem. Eu corro o servidor web do flask em 443, mas ele está servindo sem criptografia. Por exemplo
https://host/ // fails, because the server is serving plain text
http://host:443 // works, because the traffic ain't ssl-ified
Como resolver?
Para ser claro: Como resolver sem tocar no código do frasco (não queremos colocar o certificado SSL no sistema de arquivos, isso não é seguro). Eu acredito que o netsh pode ser usado para encerrar o SSL na frente de um servidor web arbitrário?
Eu não estou muito familiarizado com o Flask. Mas todos os outros aplicativos python que executei no Windows que usavam SSL referenciavam um certificado formatado em PEM e um arquivo de chave diretamente. Eles não fizeram interface com o armazenamento de certificados do Windows ou precisam de qualquer
netsh
configuração. Presumo que o mesmo seja verdade para o Flask e há uma maneira específica de fazer referência a esses arquivos e fazer com que ele atenda ao tráfego por HTTPS.Uma rápida pesquisa na web por "python flask ssl" parece ter alguns resultados encorajadores:
O consenso parece girar em torno da criação de uma instância
SSL.Context
que referencia o certificado e a chave e a passa como um argumento paraapp.run
.A resposta é: Esqueça o netsh, não parece ser o bilhete.
Resolvemos usando o IIS como proxy reverso, conforme fornecido aqui:
https://developers.coveo.com/display/public/SearchREST/Configuring+HTTPS+Reverse+Proxy+in+IIS
e aqui
https://weblogs.asp.net/owscott/creating-a-reverse-proxy-with-url-rewrite-for-iis