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

SignalR使用自签名证书连接静态IP时触发ERR_CERT_COMMON_NAME_INVALID错误

解决SignalR用自签名证书连静态IP时的ERR_CERT_COMMON_NAME_INVALID错误

一、先把证书配置改对(根本解决办法)

你证书里写的IP是192.168.1.10,但实际连接的是192.168.1.105,这就是证书验证失败的核心原因。直接修改证书配置文件,把IP换成你实际使用的192.168.1.105:

[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_req
prompt = no

[req_distinguished_name]
countryName = AU
stateOrProvinceName = NSW
localityName = Sydney
organizationName = Self-signed certificate
commonName = 192.168.1.105  # 改成实际连接的IP

[req_ext]
subjectAltName = @alt_names

[v3_req]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
IP.1 = 192.168.1.105  # 改成实际连接的IP

重新生成证书后,服务器端换上新证书,客户端浏览器导入并信任这个证书,就能正常连接了。

二、开发环境临时绕开证书验证(只用来测试)

注意:这个方法仅适用于本地开发测试,绝对不能放到生产环境,会带来严重安全风险

浏览器端操作

浏览器的安全机制不允许JS代码直接跳过验证,但可以临时这么处理:

  • 先在浏览器地址栏直接输入SignalR Hub的地址https://192.168.1.105:5142/signaling,弹出证书警告后,点击「高级」,再选择「继续访问此网站」(不同浏览器按钮文字略有差异),浏览器会临时信任该证书,之后SignalR就能正常建立连接。

如果是Node.js或Electron这类非浏览器环境,可以直接在代码里配置关闭证书验证:

const signalR = require("@microsoft/signalr");
const https = require("https");

const hubConnection = new signalR.HubConnectionBuilder()
  .withUrl("https://192.168.1.105:5142/signaling", {
    httpClient: new signalR.HttpClient({
      handler: new https.Agent({
        rejectUnauthorized: false // 关闭证书验证
      })
    })
  })
  .build();

服务器端(可选配置)

如果你的服务器是ASP.NET Core,开发环境下可以配置Kestrel,但一般只要客户端信任证书就足够了:

// 仅开发环境使用,禁止用于生产
builder.WebHost.ConfigureKestrel(options =>
{
    options.ListenAnyIP(5142, listenOptions =>
    {
        listenOptions.UseHttps("你的证书路径.pfx", "证书密码");
    });
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 02:25:15