WebSocket4Net icon indicating copy to clipboard operation
WebSocket4Net copied to clipboard

wss issue "The client and server cannot communicate, because they do not possess a common algorithm"

Open Sergio1C opened this issue 5 years ago • 2 comments

Hi. I trying to use this package but getting output message as shown on titile

`
/// Using a test's web socket echo server at: https://www.websocket.org/echo.html [TestClass] public class WebSocket4Net_UnitTest { private readonly string webSocketHost = "wss://echo.websocket.org/"; private readonly string echoCommand = "Hi, Kaazing! How are you?";

    private WebSocket websocket;

    [TestMethod]
    public void TestConnection_WhenPutCommandFirst_ExpectedCorrectResult()
    {
        //ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

        websocket = new WebSocket(uri: webSocketHost);
        websocket.Opened += new EventHandler(websocket_Opened);
        websocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(websocket_Error);
        websocket.Closed += new EventHandler(websocket_Closed);
        websocket.MessageReceived += new EventHandler<MessageReceivedEventArgs>(websocket_MessageReceived);
        websocket.Open();

        while (websocket.State == WebSocketState.Connecting)
        {
            Thread.Sleep(500);
        }
    }

    void websocket_Opened(object sender, EventArgs e)
    {
        Debug.WriteLine($"Websocket opened");
        this.websocket.Send($"{echoCommand}");

    }

    void websocket_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        Debug.WriteLine($"Message received: {e.Message}");
    }

    void websocket_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
    {
        Debug.WriteLine($"Error: {e.Exception.Message}");
    }

    private void websocket_Closed(object sender, EventArgs e)
    {
        Debug.WriteLine($"Websocket closed: {e}");
    }
}`

After some googling i found a possible solution but it isn't helped me. I have tried to change target .Net framework for 4.6.2 also but got the same.

If to try with ws uri (webSocketHost = "ws://echo.websocket.org/") it will work. . I'm assumpting it may be related with some of TLS issue? Can you help.

image

Sergio1C avatar Sep 19 '20 12:09 Sergio1C

I think that the problem is related to the code found in the PR #123. In the WebSocket4Net/WebSocket.NoSilverlight.cs file there is the following line: private SslProtocols m_SecureProtocols = SslProtocols.Default; I think it should be private SslProtocols m_SecureProtocols = SslProtocols.None;

If we look at SslProtocols Enum we see

for Default:

Use None instead of Default. Default permits only the Secure Sockets Layer (SSL) 3.0 or Transport Layer Security (TLS) 1.0 protocols to be negotiated, and those options are now considered obsolete. Consequently, Default is not allowed in many organizations. Despite the name of this field, SslStream does not use it as a default except under special circumstances.

for None:

Allows the operating system to choose the best protocol to use, and to block protocols that are not secure. Unless your app has a specific reason not to, you should use this field.

coxantohi avatar Oct 25 '22 07:10 coxantohi

Please try WebSocket4Net 1.0.0-beta.2. https://www.nuget.org/packages/WebSocket4Net/1.0.0-beta.2

kerryjiang avatar Jun 22 '24 15:06 kerryjiang