Проблемы с установлением безопасного соединения WebSocket (WSS) в консольном приложении C# с помощью WebSocketSharpC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблемы с установлением безопасного соединения WebSocket (WSS) в консольном приложении C# с помощью WebSocketSharp

Сообщение Anonymous »

Добрый день!
Я разработчик-самоучка, стремящийся расширить свои знания и улучшить свои навыки. В настоящее время я работаю над созданием безопасного соединения WebSocket (WSS) в консольном приложении C# с использованием библиотеки WebSocketSharp. Несмотря на мои усилия, я столкнулся с несколькими проблемами и был бы признателен за рекомендации.
Цель: установить безопасное соединение WebSocket (WSS) между сервером и клиентом с помощью библиотеки WebSocketSharp в консоли C#. приложение.
Текущее состояние:
  • Соединение WebSocket (ws) работает через Интернет с использованием доменного имени.
    Текущее состояние:

    Соединение WebSocket (ws) работает через Интернет с использованием доменного имени.
    Текущее состояние:

    Подключение WebSocket (ws) работает через Интернет с использованием доменного имени.
    li>
    Проблема с соединением WSS: сервер запускается без ошибки «HMAC не поддерживается», но клиент немедленно запускает ws.OnClose, даже не запуская ws.OnOpen.
    < /ul>
    Проблемы:
    • В реализации Unity я столкнулся с ошибкой «HMAC не поддерживается», которую я попытался устранить. решить проблему с помощью Bouncy Castle, но безуспешно.
    • В консольном приложении Visual Studio C# соединение WSS запускается и сразу закрывается без установления успешного соединения.

      Среда:
    • Консольное приложение C# в Visual Studio 2022.
    • Игровой движок Unity.
    • Библиотека WebSocketSharp: websocket-sharp-core(https://github.com/ImoutoChan/websocket-sharp-core)
    • ОС Windows< /li>
      Переадресация портов маршрутизатора для настройки сервера.
    • DuckDNS для доменного имени.
    • SSL-сертификат от Let's Encrypt. >
    Код клиента:

    Код: Выделить всё

    using System;a
    using WebSocketSharp;
    
    namespace ClientLast
    {
    class Program
    {
    static void Main(string[] args)
    {
    try
    {
    using (var ws = new WebSocket("ws://localhost:50001/Echo"))
    //using (var ws = new WebSocket("wss://abyza.duckdns.org:50001/Echo"))
    {
    ws.OnMessage += (sender, e) =>
    Console.WriteLine("Received from server: " + e.Data);
    
    ws.OnOpen += (sender, e) =>
    Console.WriteLine("Connection opened");
    
    ws.OnClose += (sender, e) =>
    Console.WriteLine("Connection closed: " + e.Reason);
    
    ws.OnError += (sender, e) =>
    Console.WriteLine("Error: " + e.Message);
    
    ws.Connect();
    ws.Send("Hello, World!");
    
    Console.ReadKey(true);
    }
    }
    catch (Exception ex)
    {
    Console.WriteLine($"Error: {ex.Message}");
    Console.WriteLine($"Stack Trace: {ex.StackTrace}");
    }
    }
    }
    }
    
    
    Код сервера:

    Код: Выделить всё

    using System;
    using System.Security.Cryptography.X509Certificates;
    using WebSocketSharp;
    using WebSocketSharp.Server;
    
    namespace serverLast
    {
    
    class Program
    {
    static void Main(string[] args)
    {
    try
    {
    var wssv = new WebSocketServer(System.Net.IPAddress.Any, 50001);
    //var wssv = new WebSocketServer(System.Net.IPAddress.Any, 50001,true);
    
    // Load the PFX certificate
    var cert = new X509Certificate2("D:\\3_apps\\5_vscode_projects\\website server\\sslcert - Copy//certificate.pfx", "pass");
    wssv.SslConfiguration.ServerCertificate = cert;
    
    wssv.AddWebSocketService("/Echo");
    wssv.Start();
    
    Console.WriteLine("WebSocket server started on wss://localhost:443");
    }
    catch (Exception ex)
    {
    Console.WriteLine($"Error starting server: {ex.Message}");
    }
    
    Console.ReadKey();
    }
    
    public class Echo : WebSocketBehavior
    {
    protected override void OnMessage(MessageEventArgs e)
    {
    Console.WriteLine($"Received message: {e.Data}");
    Send(e.Data);
    }
    }
    }
    
    }
    
    SSL-сертификат:
    • Получен с помощью DuckDNS и Certbot Let's Encrypt
    • Файлы сертификатов: cert.pem, Chain.pem, Fullchain.pem, privkey.pem
    • Преобразованы в .pfx с помощью:

    Код: Выделить всё

    openssl pkcs12 -export -out certificate.pfx -in combined.pem
    
    Другие условия:
    • Я использовал переадресацию портов на домашнем маршрутизаторе на свой ноутбук для обслуживания веб-сайта, WebSocket, и сервер сертификатов SSL.
    • Я знаю, что сертификат работает, потому что я использовал файлы fullchain.pem и privkey.pem в файле Python для запуска простого веб-сайта, который я мог успешно открыть с помощью HTTPS. .
    • Чтобы создать файл .pfx, я сначала объединил файлы fullchain.pem и privkey.pem в один файл.pem.
    Вопросы:
  • Что может быть причиной немедленного закрытия соединения WSS в консольном приложении C#?
  • Как устранить ошибку «HMAC не поддерживается» в Unity для установки безопасного соединения WebSocket?
  • Есть ли какие-либо дополнительные конфигурации или шаги, которые я мог пропустить при настройке установить библиотеку WebSocketSharp для безопасных соединений?
Спасибо за помощь!

Подробнее здесь: https://stackoverflow.com/questions/786 ... le-app-usi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»