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
相关产品推荐
相关产品推荐

