关于使 .NET HTTPListener 支持 HTTPS,似乎有很多令人困惑、有时甚至相互冲突的信息。我的理解如下:
一个人的 C# 代码需要一个
https
前缀(例如https://*:8443
),以便监听器了解它需要在此端口服务 SSL 请求。实际的 SSL 握手发生在幕后,并由
http.sys
(埋藏在 Windows 计算机上的某个位置)处理。 C# 代码不必显式管理 SSL 握手,因为它发生在幕后。httpListener
计算机上需要有一个“X.509 可信证书”,并且该证书需要以某种方式绑定(bind)到端口 8443(在本例中)。
我上面的理解正确吗?如果不会,请赐教。
关于X.509证书,我的理解是:
- 使用
makecert
创建 X.509 证书。该证书存储在个人存储中,并且需要移至受信任的存储(这是 HTTP 监听器将查找的位置)。看来我可以使用 certMgr 来执行移动,或者我可以使用 mmc 来实现移动。似乎有不止一种 X.509 证书格式(DER
、Base64
、pks
、pswd protected、pks
> 私有(private)等)...我应该使用首选格式吗?
将证书放入受信任存储区后,我需要将其绑定(bind)到 TCP 端口。我使用的是 Windows 7:我应该使用 httpcfg
还是 netsh
?
最佳答案
我做了很多功课并且成功了。为 .NET HttpListener 添加 SSL 支持的步骤是:
更新 C# 应用程序代码以包含
https
前缀。示例:String[] prefixes = { "http://*:8089/","https://*:8443/" };
从代码方面来说就是这样。
对于证书方面,使用 Windows SDK命令控制台或 Visual Studio Professional 命令控制台
使用
makecert.exe
创建证书颁发机构。示例:makecert -n "CN=vMargeCA" -r -sv vMargeCA.pvk vMargeCA.cer
使用
makecert.exe
创建SSL证书makecert -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 证书
将证书绑定(bind)到
IP地址:端口
和应用程序。示例:netsh http add sslcert ipport=0.0.0.0:8443 certhash=585947f104b5bce53239f02d1c6fed06832f47dc appid={df8c8073-5a4b-4810-b469-5975a9c95230}
certhash 是您的 SSL 证书的指纹。您可以使用 mmc 找到它。 appid 可在 Visual Studio 中找到...通常在 assembly.cs 中,查找 GUID 值。
可能还有其他方法可以完成上述任务,但这对我有用。
关于.net - 支持 HTTPS 的 HttpListener,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11403333/