在 Windows Server 2016 上
我有一个简单的 python web 服务器(在 flask 中)。它运行良好,并且监听端口 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 上运行 flask web 服务器,但它提供的是未加密的。例如
https://host/ // fails, because the server is serving plain text
http://host:443 // works, because the traffic ain't ssl-ified
如何解决?
要清楚:如何在不接触 flask 代码的情况下解决问题(我们不想将 SSL 证书放在文件系统上,这不安全)。我相信 netsh 可用于在任意 Web 服务器前终止 SSL?
答案1
我对 Flask 不太熟悉。但我在 Windows 上运行的所有其他使用 SSL 的 Python 应用程序都直接引用了 PEM 格式的证书和密钥文件。它们根本不与 Windows 证书存储交互,也不需要任何netsh
配置。我推测 Flask 也是如此,并且有一种特定的方式来引用这些文件并让它通过 HTTPS 提供流量。
在网上快速搜索“python flask ssl”似乎有一些令人鼓舞的结果:
共识似乎围绕着创建一个SSL.Context
引用证书和密钥的实例并将其作为参数传递给app.run
。
答案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