c# - 我可以强制我的网络套接字不使用 SSL 即使我的网站是在 SSL 下提供服务的吗?

标签 c# sockets ssl websocket

我有一个 JavaScript 客户端。

我有一个网络套接字,它正在尝试与我的服务器通信。

我的网络应用程序在 https 下运行,我使用 Open SSL 获取我的证书。

在我的 C# 中,我使用 Socket 对象来接收客户端请求。

我的客户端可以连接,但是当我尝试读取/解析 header 时,它已被加密。 (我不知道如何解密)。

如果我想到如果我的网络套接字不使用 SSL,问题就会消失。但是,即使我将客户端中的 uri 设置为:

var url = "ws://192.168.0.9:8090/Relayer";

改为:

var url = "wss://192.168.0.9:8090/Relayer";

这是我的服务器代码:

//server starting to listen

serverSocket = new Socket( AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP );
serverSocket.Bind( new IPEndPoint( IPAddress.Any, 8090 ) );
serverSocket.Listen( 128 );
serverSocket.BeginAccept( null, 0, OnAccept, null );


//server responding to Client Request:

private static Socket serverSocket;

private static void OnAccept(IAsyncResult result)
{
    byte[] buffer = new byte[1024];

    try
    {
        Socket client = null;
        string headerResponse = "";
        if (serverSocket != null && serverSocket.IsBound)
        {
            client = serverSocket.EndAccept(result);
            var i = client.Receive(buffer);



            //my many attempts to read the data....       

            string unicode = (Encoding.UTF8.GetString(buffer)).Substring(0, i);
            string str = Uri.UnescapeDataString(unicode);
            var outputs = System.Net.WebUtility.HtmlDecode(unicode);
        }
        if (client != null)
        {
            /* Handshaking and managing ClientSocket */
        }
    }
    catch (SocketException ex)
    {
        Logger.LogVerbose(LoggerNames.Error, ex.ToString());
    }
    finally
    {
        if (serverSocket != null && serverSocket.IsBound)
        {
            serverSocket.BeginAccept(null, 0, OnAccept, null);
        }
    }
}

那么,我可以强制我的网络套接字不使用 SSL 吗?

谢谢

好的 阅读资料后,我明白混合使用 http 和 https 以及 ws 和 wss 不是一个好主意。

任何使用 SSL/wss 使它工作的想法都很好 :)

最佳答案

Can I force my web socket not to use SSL even though my site is served under SSL?

如果您的 JavaScrip 客户端遵循安全约定,那么答案是。答案也是“不应该”。

这有很多原因,但以下原因就足够了:

当用户发现网站已加密时,他们会认为他们分享的任何私有(private)信息都不会被第三方看到。这是加密 promise 的一部分。但是,如果在声明站点已加密后允许明文(未加密)通信,此 promise 可能会被打破

这就是为什么安全客户端不允许在安全网站内进行非加密通信(即 WebSocket、XHR 等)。

My clients can connect but the when I try to read/parse the headers it is encrypted. (I do not know how to decrypt).

加密后的数据需要通过SSL层才能解密。

通常,许多语言会提供一个“SSL 套接字”抽象,它的行为类似于套接字,但会自动加密/解密数据。

comments 中所述SslStream可能正是您要找的东西(请参阅 Jesse de Wit 的评论)。

关于c# - 我可以强制我的网络套接字不使用 SSL 即使我的网站是在 SSL 下提供服务的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57436150/

相关文章:

c# - 连接服务不在 VS2013 中?

java - 在 AWS ec2 实例 (ubuntu) 上运行 JMeter 测试

node.js - 为什么我的 express-server 仅通过浏览器支持 https 而不是通过其他 nodejs 脚本?

c# - 取消引用可能的空引用 C#

c# - 如何获得 session 结束的通知?

c# - 高级 regex.replace 处理

wordpress - 控制台错误 : Mixed content, 但我在代码中找不到链接

java - "Software caused connection abort: socket write error"的官方原因

c# - Windows Phone 8 - 保持套接字打开并接收未知长度的数据

c# - c++和c#应用程序通过网络进行通信