在 Windows Server 2016 上
我有一个简单的 python web 服务器(在烧瓶中)。它工作得很好,并在端口 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 可用于在任意 Web 服务器前终止 SSL?
我对 Flask 不是很熟悉。但是我在 Windows 上运行的所有其他使用 SSL 的 python 应用程序都直接引用了 PEM 格式的证书和密钥文件。他们根本不需要与 Windows 证书存储交互,也不需要任何
netsh
配置。我认为 Flask 也是如此,并且有一种特殊的方法可以引用这些文件并让它通过 HTTPS 为流量提供服务。对“python flask ssl”的快速网络搜索似乎有一些令人鼓舞的结果:
共识似乎围绕创建一个
SSL.Context
引用证书和密钥的实例并将其作为参数传递给app.run
.答案是:忘记netsh,好像没有ticket。
我们通过使用 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