如何使用 System.Net.HttpListener 在 WebSocket 中启用 SSL

Gut*_*iro 2 c# httplistener azure websocket .net-4.5

我正在 Windows Azure 上使用 .Net 4.5 和 HttpListener 类(辅助角色)来制作我自己的 WebSocket 服务器。对于 HTTP 非安全连接,它工作得很好。问题是我需要使用 SSL(wss://) 来保护 WebSocket 连接。

我四处寻找,HttpListener 类文档和互联网(即使在这里)都没有给我太大帮助。

我发现 httpcfg.exe 应该帮助我配置证书,但不幸运。

所以,这就是我的问题:

  1. 有什么方法可以从我的代码中启用它吗?就像从存储中读取证书并将其设置在 HttpListener 上一样?
  2. 如果不是,httpcfg.exe 是解决方案吗?如果是,如何使用?
  3. 如果 1 == 否且 2 == 是,我如何在 Azure 中使用 httpcfg?

谢谢!我真的很感谢你的帮助...

此致...

古腾堡

Gut*_*iro 5

好吧,刚刚想通了。

由于HttpListener是HTTP.sys的包装器,因此我们必须在开始使用 HttpListener 之前配置它。

httpcfg.exe 用于 Windows Vista 之前的 Windows 版本。由于我使用的是 .net 4.5 HttpListener WebSockets并且它仅适用于Windows8/windows Server 2012(如果您尝试在 windows8 之前的 Windows 版本上使用 websockets,您将得到 PlattaformNotSupportedException ,因此我们应该使用netsh实用程序而不是httpcfg

因此,要在 Windows 8 中配置 HTTP.sys,请打开 CMD 并向其中添加以下命令:

netsh http add sslcert ipport=IP:PORT certhash=YOU_CERT_HASH appid={GUID}
Run Code Online (Sandbox Code Playgroud)

将IPPORT更改为您希望使用证书保护的所需 IP 地址和端口号,以及包含证书指纹的YOUR_CERT_HASH(证书应事先上传到 Azure 门户)以及使用从任何 GUID 生成工具生成的 GUID 的GUID就像 Visual Studio 中的那样(工具 > 创建 Guid)。

之后,你只需要设置一下HttpListener.Prefix.Add("https://youIP:youPort/yourPath")就可以了。

和我一样,有些人会问如何让它在Windows Azure上工作......您可以在您的角色启动之前使用启动任务运行此命令并根据需要设置 HTTP.sys。

有关如何使用启动任务的详细信息,请查看 MSDN 上的文档http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx,有关httpcfgnetsh的更多详细信息,请查看以下位置的其他文档: MSDN http://msdn.microsoft.com/en-us/library/ms733791.aspx