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

时间:2013-06-16 16:10:16

标签: c# azure websocket .net-4.5 httplistener

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

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

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

所以,这是我的问题:

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

    最好的问候......

    Gutemberg

1 个答案:

答案 0 :(得分:3)

好的,刚想通了。

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

IP PORT 更改为您希望使用证书保护的所需IP地址和PORT编号,并使用 YOUR_CERT_HASH 更改为您的证书的thumbprint (证书应该先前上传到azure门户网站)和 GUID ,其中包含您从任何GUID生成工具(如Visual Studio中的工具>创建Guid)生成的GUID )。

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

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

有关如何使用启动任务的详细信息,请查看MSDN http://msdn.microsoft.com/en-us/library/windowsazure/hh180155.aspx上的此文档以及 httpcfg netsh ,请在MSDN http://msdn.microsoft.com/en-us/library/ms733791.aspx

中查看此其他文档