C# - 使用 feck 的 TLS / SSL Websockets

Posted

技术标签:

【中文标题】C# - 使用 feck 的 TLS / SSL Websockets【英文标题】:C# - TLS / SSL Websockets using fleck 【发布时间】:2014-02-28 18:40:49 【问题描述】:

我正在尝试使用 Fleck lib 建立 TLS/SSL websocket 连接。

https://github.com/statianzo/Fleck (0.9.8.25)

现在我得到了服务器 startet。 但是当客户端连接时,我会收到以下消息。

28-02-2014 19:16:15 [Info] Server started at wss://localhost:8081
28-02-2014 19:18:51 [Debug] Client connected from 127.0.0.1:62543
28-02-2014 19:18:51 [Debug] Authenticating Secure Connection
28-02-2014 19:18:52 [Debug] 0 bytes read. Closing.

有人知道我做错了什么吗?

浏览器:Chrome,版本:33.0.1750.117

// 示例代码。

        FleckLog.Level = LogLevel.Debug;

        var allSockets = new List<IWebSocketConnection>();

        var server = new WebSocketServer("wss://localhost:8081");

        server.Certificate = new X509Certificate2(@"CRT.pfx", "Pwd");

        server.Start(socket =>
        

            socket.OnOpen = () =>
            
                Console.WriteLine("Open!");
                allSockets.Add(socket);
            ;
            socket.OnClose = () =>
            
                Console.WriteLine("Close!");
                allSockets.Remove(socket);
            ;
            socket.OnMessage = message =>
            

                foreach (var user in allSockets.ToList())
                
                     if(user.ConnectionInfo.Id != socket.ConnectionInfo.Id)
                         user.Send(message);
                     
                

            ;
        );


        var input = Console.ReadLine();

        while (input != "exit")
        

            foreach (var socket in allSockets.ToList())
            
                socket.Send(input);
            

            input = Console.ReadLine();
        

【问题讨论】:

【参考方案1】:

证书是否由浏览器信任的 CA 签署?如果没有,您使用 Chrome 打开的网页必须在 HTTPS 下,以便系统提示您接受证书,否则连接将失败。

如果即使这样做也不起作用,请尝试使用WebSocketListener 并告诉我您遇到的错误(如果有)。

我在调试 WSS 时发现的一些问题:

请记住将端口号更改为与用于不安全连接的端口号不同的端口号。如果端口突然变得安全,有些浏览器会感到困惑,反之亦然。 请记住使用证书中指示的主机名而不是 IP 进行连接。 如果您使用的是自签名证书,请将其用于 HTTPS,以便您可以看到接受该证书的对话框。通过 WSS:// 访问时,没有证书接受对话框,只是连接失败。

也尝试使用自签名证书,看看它是否有效。

【讨论】:

以上是关于C# - 使用 feck 的 TLS / SSL Websockets的主要内容,如果未能解决你的问题,请参考以下文章

(40)C#里使用WebRequest和出错:请求被中止: 未能创建 SSL/TLS 安全通道

请求被中止:无法创建 SSL/TLS 安全通道 c# Webrequest

错误:C# 底层连接已关闭:无法为 SSL/TLS 安全通道建立信任关系

请求被中止 无法在共享托管服务器 C# 上创建 ssl/tls 安全通道

原创C# API 未能创建 SSL/TLS 安全通道 问题解决

C# 解决“请求被中止: 未能创建 SSL/TLS 安全通道”的问题