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

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

我一直在寻找,HttpListener类文档和互联网(即使在这里)都没有帮助我。

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

那么,这是我的问题:

  1. 有没有办法从我的代码中启用它? 喜欢从商店读取证书并以某种方式在HttpListener上设置它?
  2. 如果没有,httpcfg.exe是解决方案? 如果是的话,如何使用它?
  3. 如果1 ==否和2 ==是,我如何在Azure中使用httpcfg?

谢谢! 我非常感谢帮助……

最好的祝福…

Gutemberg

好吧,刚想通了。

由于HttpListenerHTTP.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} 

IPPORT更改为您希望使用证书保护的所需IP地址和PORT编号以及使用证书指纹YOUR_CERT_HASH (证书应先前上载到azure门户)和GUID以及从任何GUID生成工具生成的GUID喜欢Visual Studio中的那个(工具>创建指南)。

在它之后,你只需要设置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