如何使用System.Net.HttpListener在WebSocket中启用SSL
我在Windows Azure(工作者角色)上使用.Net 4.5和HttpListener类来创建自己的WebSocket服务器。 对于HTTP非安全连接,它可以很好地工作。 问题是我需要使用SSL(wss://)保护WebSocket连接。
我一直在寻找,HttpListener类文档和互联网(即使在这里)都没有帮助我。
我发现httpcfg.exe应该帮我配置证书,但没有幸运。
那么,这是我的问题:
- 有没有办法从我的代码中启用它? 喜欢从商店读取证书并以某种方式在HttpListener上设置它?
- 如果没有,httpcfg.exe是解决方案? 如果是的话,如何使用它?
- 如果1 ==否和2 ==是,我如何在Azure中使用httpcfg?
谢谢! 我非常感谢帮助……
最好的祝福…
Gutemberg
好吧,刚想通了。
由于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 (证书应先前上载到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上查看此文档,有关httpcfg或netsh的更多详细信息,请查看此其他文档。 MSDN http://msdn.microsoft.com/en-us/library/ms733791.aspx