Dot-Net

支持 HTTPS 的 Httplistener

  • July 9, 2012

關於使 .NET HTTPListener 支持 HTTPS,似乎有很多令人困惑的資訊,有時甚至是相互矛盾的資訊。我的理解如下:

  • 一個人的 C# 程式碼需要一個https前綴(例如,https://*:8443),以便偵聽器了解它需要在此埠上服務 SSL 請求。
  • 實際的 SSL 握手發生在幕後,並由http.sys(埋在 Windows 機器上的某個地方)處理。C# 程式碼不必顯式管理 SSL 握手,因為它發生在幕後。
  • 需要在機器上擁有“X.509 受信任證書” httpListener,並且該證書需要以某種方式綁定到埠 8443(在此範例中)。

我上面的理解正確嗎?如果沒有,請教育我。

關於 X.509 證書,我的理解是:

  • 用於makecert創建 X.509 證書。此證書儲存在個人儲存中,需要轉移到受信任的儲存(這是 HTTP 偵聽器將查看的位置)。看來我可以certMgr用來執行移動,或者我可以mmc用來實現移動。似乎有不止一種 X.509 證書格式(DER, Base64, pks, pswd protected, pksprivate 等)…有我應該使用的首選格式嗎?

將證書放入可信儲存後,我需要將其綁定到 TCP 埠。我在 Windows 7 上:我應該使用httpcfg還是netsh

我做了一堆功課並得到了這個工作。為 .NET HttpListener 添加 SSL 支持的步驟如下:

  1. 更新 C# 應用程式碼以包含https前綴。例子:
String[] prefixes = { "http://*:8089/","https://*:8443/" };

從程式碼方面來說就是這樣。 2. 對於證書方面,使用Windows SDK命令控制台或 Visual Studio Professional 命令控制台

  • 用於makecert.exe創建證書頒發機構。例子:
makecert -n "CN=vMargeCA" -r -sv vMargeCA.pvk vMargeCA.cer
用於`makecert.exe`創建 SSL 證書
kecert -sk vMargeSignedByCA -iv vMargeCA.pvk -n "CN=vMargeSignedByCA" -ic vMargeCA.cer vMargeSignedByCA.cer -sr localmachine -ss My
使用 MMC GUI 在 Trusted Authority 儲存中安裝 CA
使用 MMC GUI 在個人商店中安裝 SSL 證書
將證書綁定到`IP address:port`應用程序。例子:
tsh http add sslcert ipport=0.0.0.0:8443 certhash=585947f104b5bce53239f02d1c6fed06832f47dc appid={df8c8073-5a4b-4810-b469-5975a9c95230}

rtash 是您的 SSL 證書的指紋。您可以使用 mmc 找到它。appid 在 Visual Studio 中找到...通常在 assembly.cs 中,查找 GUID 值。


可能還有其他方法可以完成上述操作,但這對我有用。

引用自:https://stackoverflow.com/questions/11403333