Windows

NETSH - 如何將 SSL 證書綁定到埠並將流量傳遞給應用程序?

  • May 30, 2018

在 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?

答案是:忘記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

我對 Flask 不是很熟悉。但是我在 Windows 上執行的所有其他使用 SSL 的 python 應用程序都直接引用了 PEM 格式的證書和密鑰文件。他們根本不需要與 Windows 證書儲存互動,也不需要任何netsh配置。我認為 Flask 也是如此,並且有一種特殊的方法可以引用這些文件並讓它通過 HTTPS 為流量提供服務。

對“python flask ssl”的快速網路搜尋似乎有一些令人鼓舞的結果:

共識似乎圍繞創建一個SSL.Context引用證書和密鑰的實例並將其作為參數傳遞給app.run.

引用自:https://serverfault.com/questions/914360