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

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

Сообщение Anonymous »

Добрый день!
Я разработчик-самоучка, стремящийся расширить свои знания и улучшить свои навыки. В настоящее время я работаю над созданием безопасного соединения WebSocket (WSS) в консольном приложении C# с использованием библиотеки WebSocketSharp. Несмотря на мои усилия, я столкнулся с несколькими проблемами и был бы признателен за рекомендации.
Цель: установить безопасное соединение WebSocket (WSS) между сервером и клиентом с помощью библиотеки WebSocketSharp в консоли C#. приложение.
Справочная информация:
Моя цель — создать проект Unity, в котором один экземпляр Unity выступает в качестве сервера, а другой — в качестве клиента. Я начал с тестирования библиотеки WebSocketSharp в Visual Studio 2022 с использованием консольного приложения (.NET Framework) как для клиента, так и для сервера. Незащищенное соединение WebSocket (ws) работает, поэтому я реализовал его в Unity, в результате чего сервер и клиент Unity работали, но по-прежнему использовали ws. Теперь я пытаюсь перейти на безопасное соединение WebSocket (wss). Ниже я сосредоточусь в основном на реализации консольного приложения.
Текущее состояние:
  • Подключение WebSocket (ws) работает без проблем. Интернет использует доменное имя как в Unity, так и в консольной реализации клиента и сервера.
  • Подключение к WSS проблематично: в реализации Unity сервер не запускается из-за ошибки без «HMAC». не поддерживается». В реализации консольного приложения на сервере нет ошибки, но клиент немедленно запускает ws.OnClose, даже не запуская ws.OnOpen.
Проблемы:
  • В реализации Unity я столкнулся с ошибкой «HMAC не поддерживается», которую я пытался устранить с помощью Bouncy Castle, но безуспешно.

    В реализации Unity я столкнулся с ошибкой «HMAC не поддерживается».

    В реализации Unity я столкнулся с ошибкой «HMAC не поддерживается», которую я пытался устранить с помощью Bouncy Castle, но безуспешно.

    li>
    В консольном приложении Visual Studio C# соединение WSS запускается и сразу закрывается без успешного установления соединения. «Соединение закрыто: при подключении произошло исключение.
    Ошибка: произошла ошибка при отправке данных».
Среда:
  • Консольное приложение C# в Visual Studio 2022
  • Unity Game Engine
  • Библиотека WebSocketSharp: websocket-sharp-core(https://github.com/ImoutoChan/websocket-sharp-core)
  • ОС Windows
  • Переадресация портов маршрутизатора для настройка сервера
  • 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.
Вывод в консоль клиента с помощью ws:

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

Connection opened
Received from server: Hello, World!
Вывод консоли клиента с помощью wss:
Connection closed: An exception has occurred while connecting.
Error: An error has occurred in sending data.
< /code>
Вопросы: < /p>
  • Что может вызвать немедленное закрытие соединения WSS в приложении C# Console? < / li>
    Как устранить ошибку «HMAC не поддерживается» в Unity для установки безопасного соединения WebSocket?
  • Есть ли какие-либо дополнительные конфигурации или шаги, которые я мог бы предпринять? пропустили настройку библиотеки WebSocketSharp для безопасных соединений?
Спасибо за помощь!

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

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

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

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

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

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

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