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

GitHub Pages客户端连接Node.js服务器遇ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误

解决GitHub Pages客户端连接本地Node.js HTTPS服务器的ERR_SSL_VERSION_OR_CIPHER_MISMATCH错误

嘿,这个错误我之前调试本地HTTPS服务的时候也碰到过,核心问题其实是你的Node.js HTTPS服务器没配置有效的SSL证书,再加上GitHub Pages本身是HTTPS环境,浏览器的安全策略会严格校验证书,这就导致了版本或密码套件不匹配的报错。咱们一步步来解决:

先搞懂错误根源

  • 你用了https.createServer()但代码里完全没配置SSL证书,本地HTTPS服务必须要有证书才能让浏览器信任
  • GitHub Pages是HTTPS页面,浏览器的混合内容规则会阻止它访问证书无效的HTTPS资源,直接触发这个加密相关的错误

解决方案1:生成自签名证书(仅本地测试用)

如果只是自己本地调试,可以用OpenSSL生成自签名证书:

  1. 运行下面的命令生成证书和密钥(没装OpenSSL的话先装一个):

    openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes
    

    提示填写信息的时候,本地测试大部分直接回车跳过就行。

  2. 修改你的Node.js代码,把证书加进去:

    const fs = require('fs');
    const app = require('express')();
    // 读取生成的证书和密钥文件
    const sslOptions = {
      key: fs.readFileSync('./key.pem'),
      cert: fs.readFileSync('./cert.pem')
    };
    // 把sslOptions传入createServer
    const server = require('https').createServer(sslOptions, app);
    const io = require('socket.io')(server);
    
    app.set('port', process.env.PORT || 8080);
    app.set('host', process.env.HOST || '0.0.0.0');
    
    server.listen(app.get('port'), app.get('host'), () => {
      console.log("Express server listen...");
    });
    
  3. 最后别忘了把生成的cert.pem导入到浏览器的信任根证书里,不然浏览器还是会提示不安全。比如Chrome里是「设置→隐私和安全→安全→管理证书→导入到受信任的根证书颁发机构」。

解决方案2:用ngrok快速绕开证书问题(更省心)

要是不想折腾证书和浏览器信任设置,用ngrok工具把本地服务暴露成带合法SSL证书的公网地址最方便:

  1. 下载安装ngrok后,在终端运行:
    ngrok https 8080
    
  2. 复制ngrok给出的HTTPS地址(比如https://abc123.ngrok.io),替换掉客户端里的本地IP地址,这样GitHub Pages的页面就能正常连接了——ngrok会自动提供浏览器信任的SSL证书。

额外提醒

还要注意:GitHub Pages是公网的静态页面,如果你用本地IP连接,得确保你的本地服务器所在的网络已经做了端口映射,并且你的IP是公网IP,不然公网环境下的客户端根本连不到你的本地服务哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:08:27