Я разработчик-самоучка, стремящийся расширить свои знания и улучшить свои навыки. В настоящее время я работаю над созданием безопасного соединения 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}"); } } } }SSL-сертификат:Код: Выделить всё
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.
- Что может быть причиной немедленного закрытия соединения WSS в консольном приложении C#?
- Как устранить ошибку «HMAC не поддерживается» в Unity для установки безопасного соединения WebSocket?
- Есть ли какие-либо дополнительные конфигурации или шаги, которые я мог пропустить при настройке установить библиотеку WebSocketSharp для безопасных соединений?
Подробнее здесь: https://stackoverflow.com/questions/786 ... le-app-usi