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

使用自签名HTTPS证书连接Socket.IO时遇ERR_CERT_INVALID错误求助

解决Socket.IO HTTPS连接的ERR_CERT_INVALID问题

嘿,我看了你的问题,首先发现服务器端有个关键错误,这大概率是导致连接失败的核心原因!咱们一步步来排查解决:

1. 先修复服务器端Socket.IO的初始化代码

你现在写的是:

var io = require('socket.io')(https);

这里犯了个小错误——你传入的是https模块本身,但Socket.IO需要绑定到你已经配置好证书的HTTPS服务器实例(也就是你创建的httpsServer)。把这行改成:

var io = require('socket.io')(httpsServer);

这一步是重中之重,不修复的话,Socket.IO根本没依附在你的HTTPS服务上,肯定连不上。

2. 确认客户端的rejectUnauthorized配置真的生效了

虽然你在SocketIoModule的配置里加了rejectUnauthorized: false,但有时候Angular模块的配置可能因为版本问题没正确传递给底层的socket.io-client。你可以试试在组件里手动创建Socket实例来验证:

import { io, Socket } from 'socket.io-client';

export class YourComponent {
  private socket: Socket;

  constructor() {
    this.socket = io('https://localhost:4444', {
      transports: ['websocket'],
      rejectUnauthorized: false
    });
  }
}

如果手动创建能连接上,那就是模块配置的问题,你可以考虑更新ngx-socket-io(假设你用的是这个库)的版本,或者手动管理Socket实例。

3. 检查自签名证书的有效性

既然你用的是自签名证书,除了客户端关闭验证,还要确保:

  • file.crt和file.pem是配对生成的,没有损坏
  • 证书的Common Name(CN)设置的是localhost,和你访问的域名一致
  • 可以先在浏览器里打开https://localhost:4444,手动信任这个证书——有时候系统的证书信任会影响WebSocket连接,即使代码里关了验证也可能受影响

4. 确认服务器真的在监听4444端口

别忘了给你的HTTPS服务器加上监听代码,不然服务根本没启动:

httpsServer.listen(4444, () => {
  console.log('HTTPS服务器已在4444端口启动');
});

额外排查小技巧

  • 确保socket.io(服务端)和socket.io-client(客户端)的版本匹配,版本不兼容很容易出各种连接问题,建议两者都用最新的稳定版,或者同一个大版本
  • 暂时关闭本地防火墙、代理工具,看看是不是端口被拦截了

先把第一步的服务器代码改了,应该能解决大部分问题,如果还有问题再按后面的步骤排查~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:22:54