C#WebSocketServer wss://连接失败

时间:2014-02-24 13:53:46

标签: c# ssl browser websocket

我编写了一个WebSocket服务器,目前只能用于ws://连接 使用http://www.websocket.org/echo.html(在Chrome上)和http://websocket4net.codeplex.com/进行了测试。

现在我还要支持wss://个连接(TLS) 我已经使用它与WebSocket4Net一起使用但是在使用echo测试时,
在C#代码中执行SslStream.AuthenticateAsServer();后,javascript立即抛出异常。

它进行TLS协商,但Chrome拒绝连接 SslStream读取和写入(由AuthenticateAsServer完成的ServerSide):

Read(5, 0, 5) == 5
Read(517, 5, 512) == 512
Write(887, 0, 887)
Read(887, 0, 5) == 5
Read(887, 5, 262) == 262
Read(5, 0, 5) == 5
Read(6, 5, 1) == 1
Read(5, 0, 5) == 5
Read(53, 5, 48) == 48
Write(59, 0, 59)

我使用以下步骤添加证书:

makecert -sv CA.pvk -r -n "CN=Dev" -a sha256 -len 2048 -sky signature -cy authority CA.cer
makecert -ic CA.cer -iv CA.pvk -n "CN=localhost, CN=127.0.0.1" -a sha256 -len 2048 -sky exchange -sv CA_localhost.pvk -pe CA_localhost.cer
cert2spc CA_localhost.cer CA_localhost.spc
pvkimprt -pfx CA_localhost.spc CA_localhost.pvk //Select export
//Import CA.cer into your Computer store's Trusted Root Certification Authorities (certmgr.msc)
//Import the private key that the server is going to use into the server machine's Personal store.
//This is achieved by importing the .pfx file that you generated earlier.

new SslStream(new NetworkStream(clientSocket), true)创建的SslStream 对于AuthenticateAsServer,我使用的是“CA_localhost.cer”证书。

确认证书显示在certmgr.msc中后,我打开了 Chrome中的http://www.websocket.org/echo.html并使用wss://localhost:12345作为地址(我的服务器正在监听)并选中复选框。
点击Connect后我才会收到:

 ERROR: undefined
 DISCONNECTED

javascript控制台显示:
与'wss://127.0.0.1:12345 /?encoding = text'的WebSocket连接失败:在收到握手响应之前连接已关闭

AuthenticateAsServer之后的服务器端,属性IsAuthenticatedIsEncrypted设置为true,但在此之后我立即收到零长度数据,关闭连接。

我假设我在证书创建和/或安装过程中出错,但我不知道我做错了什么。
有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过几个小时的测试和放弃后,我再给它一次:
事实证明(或者至少对我而言)只有最后一个通用名称才能对ws-uri进行验证。

使用wss://127.0.0.1:12345工作。