Я разработчик-самоучка, стремящийся расширить свои знания и улучшить свои навыки. В настоящее время я работаю над созданием безопасного соединения 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);
}
}
}
}
- Получен с помощью 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.
Код: Выделить всё
Connection opened
Received from server: Hello, World!
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