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

Node.js请求BigBlueButton接口报证书已过期问题咨询

问题原因
  • 根证书信任库差异:浏览器、Postman使用操作系统或自身维护的根证书列表,会自动更新信任新签发的根证书;而Node.js使用内置的独立根证书库,低版本Node.js未收录近年新增的根证书,尤其针对使用Let's Encrypt证书的站点,2021年旧的DST Root CA X3根证书过期后,低版本Node.js会误判仍在有效期内的证书过期。
  • 服务器证书链不完整:浏览器会自动补全缺失的中间证书,Node.js不会自动补全,证书链缺失也会触发校验失败报过期错误。
  • Node.js版本过低:14.x以下的老旧Node.js版本,内置根证书库长期未更新,无法识别近年新的根证书签发机构。
解决方案

1. 优先升级Node.js版本

升级到14.x及以上的最新LTS版本,新版本已内置最新根证书,绝大多数情况下可直接解决该问题。

2. 临时测试方案(生产环境禁用)

在请求参数中关闭SSL证书校验,修改代码如下:

let createApiUrl = `https://bbb.example.com/bigbluebutton/api/create?name=${meetingName}&logoutURL=${logoutUri}&record=true&meetingID=${meetingId}&attendeePW=${attendeePW}&moderatorPW=${moderatorPW}&checksum=${checkSum}`;
response = await new Promise((resolve, reject) => {
  return HTTP.call("GET", `${createApiUrl}`, {strictSSL: false}, (error, response) => {
    if (error) {
      reject(error);
    } else {
      resolve(response);
    }
  });
});

该方案存在中间人攻击风险,仅可用于本地开发调试。

3. 生产环境安全方案

手动指定信任对应根证书,步骤如下:

  1. 导出BigBlueButton服务器使用的根证书(若为Let's Encrypt证书可直接下载ISRG Root X1证书文件),存为root.pem放到项目目录
  2. 修改请求代码,传入证书参数:
const fs = require('fs');
const trustedRootCA = fs.readFileSync('./root.pem');

let createApiUrl = `https://bbb.example.com/bigbluebutton/api/create?name=${meetingName}&logoutURL=${logoutUri}&record=true&meetingID=${meetingId}&attendeePW=${attendeePW}&moderatorPW=${moderatorPW}&checksum=${checkSum}`;
response = await new Promise((resolve, reject) => {
  return HTTP.call("GET", `${createApiUrl}`, {ca: trustedRootCA}, (error, response) => {
    if (error) {
      reject(error);
    } else {
      resolve(response);
    }
  });
});

4. 检查服务端证书配置

执行命令openssl s_client -connect bbb.example.com:443检查证书链是否完整,若返回提示缺少中间证书,需要将域名证书、中间证书拼接后重新配置到BigBlueButton服务器的反向代理服务中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:09:04