You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用WebSocketSharp建立C#/Unity WSS连接的问题求助

使用WebSocketSharp实现WSS连接的问题排查与解决方案

场景概述

在C#控制台应用和Unity中使用WebSocketSharp-core库实现WSS连接时,遇到两类问题:控制台客户端连接后立即关闭,Unity服务器启动报"HMAC is not supported"错误,而WS连接均正常工作。环境包含Windows系统、DuckDNS域名、Let's Encrypt SSL证书。


问题1:控制台应用WSS连接立即关闭的原因及解决

可能原因

  • PFX证书转换不规范,未包含完整信任链
  • 证书域名与客户端连接的域名不匹配
  • SSL协议版本未明确指定,导致协商失败
  • 服务器SSL配置缺失关键项

解决步骤

  1. 重新生成PFX证书
    不要合并fullchain和privkey为combined.pem,直接用以下OpenSSL命令生成PFX,确保包含完整证书链和私钥:

    openssl pkcs12 -export -out certificate.pfx -inkey privkey.pem -in fullchain.pem
    

    输入密码后完成转换,确保证书的CN或SAN字段与abyza.duckdns.org完全匹配。

  2. 调整服务器SSL配置
    在服务器代码中添加TLS版本指定,并关闭证书吊销检查(测试阶段):

    var wssv = new WebSocketServer(System.Net.IPAddress.Any, 50001, true);
    var cert = new X509Certificate2("path/to/certificate.pfx", "your-password");
    wssv.SslConfiguration.ServerCertificate = cert;
    // 指定支持的TLS版本
    wssv.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
    // 测试时关闭吊销检查
    wssv.SslConfiguration.CheckCertificateRevocation = false;
    

    注意修正服务器启动提示的端口(代码中写的是443,实际用的是50001)。

  3. 客户端临时添加证书验证回调
    测试阶段可跳过证书验证确认连接问题,正式环境需移除:

    using (var ws = new WebSocket("wss://abyza.duckdns.org:50001/Echo"))
    {
        ws.SslConfiguration.ServerCertificateValidationCallback = (sender, cert, chain, errors) => true;
        // 其他事件绑定...
        ws.Connect();
    }
    

问题2:Unity中"HMAC is not supported"错误解决

原因

WebSocketSharp-core是精简版,在Unity的Mono运行时中缺少部分加密算法支持,Bouncy Castle集成方式不正确。

解决步骤

  1. 替换为完整版WebSocketSharp
    移除websocket-sharp-core,改用NuGet上的原版WebSocketSharp(非core版本),完整版包含更完整的加密实现。

  2. 正确集成Bouncy Castle

    • 下载Unity兼容的BouncyCastle.Crypto.dll放入Unity项目的Plugins文件夹。
    • 在服务器启动前注册Bouncy Castle加密提供者:
      using Org.BouncyCastle.Security;
      
      void StartServer()
      {
          // 注册Bouncy Castle作为加密提供者
          SecurityUtilities.AddProvider(new BouncyCastleProvider());
          // 后续服务器初始化代码...
      }
      
  3. 切换Unity脚本运行时
    打开Unity项目设置:Edit > Project Settings > Player > Other Settings > Configuration,将Scripting Runtime Version切换为.NET 4.x Equivalent或更高版本,新版本运行时对加密算法支持更完善。


问题3:WebSocketSharp搭建WSS的遗漏配置步骤

  • 证书完整性检查:必须使用fullchain.pem生成PFX,确保包含服务器证书和所有中间证书,否则客户端无法验证信任链。
  • SSL协议版本指定:显式启用TLS1.2/TLS1.3,避免使用过时的SSLv3/TLS1.0协议,提升兼容性和安全性。
  • 端口与防火墙配置:确认路由器已转发50001端口的TCP流量,Windows防火墙允许该端口入站/出站。
  • 域名解析验证:确保DuckDNS域名正确解析到服务器公网IP,可通过ping abyza.duckdns.org验证。
  • 正式环境证书验证:客户端不要跳过证书验证,确保证书域名匹配、信任链完整,避免安全风险。

内容的提问来源于stack exchange,提问作者ABYZA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 23:30:07