A resposta é: Esqueça netsh, não parece ser o ticket.
Nós resolvemos usando o IIS como um proxy reverso, conforme documentado aqui:
e aqui
No Windows Server 2016
Eu tenho um servidor web python simples (em frascos). Ele funciona muito bem e escuta na porta 80 (ou qualquer coisa que eu configure para ouvir).
Eu preciso atendê-lo por SSL.
Eu tenho um bom certificado e importado para a loja de informática / pessoal.
Então eu 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 funcionam bem. Eu corro o servidor da web flask em 443, mas está servindo não criptografado. 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 eu executei no Windows que usavam SSL referenciavam diretamente um certificado formatado pelo PEM e um arquivo de chave. Eles não faziam interface com a loja de certificação do Windows ou precisavam de netsh
config. Eu presumo que o mesmo é verdade para o Flask e há uma maneira particular de fazer referência a esses arquivos e que eles sirvam 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 de SSL.Context
que referencia o certificado e a chave e passa-o como um argumento para app.run
.