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

Node.js中node-fetch报证书过期但域名证书实际有效问题求助

证书判定过期的常见原因
  • Node.js 内置独立的根证书信任库,和系统、浏览器的信任库不互通。如果你的新SSL证书使用的根CA未收录在当前运行环境的Node.js内置根证书列表中,就会触发校验失败报错,最常见的比如使用新版Let's Encrypt根证书但Node.js版本过旧未收录的场景。
  • 服务端证书链部署不完整:仅部署了域名证书未部署对应中间证书,浏览器会自动补全缺失的中间证书所以你手动校验显示正常,但Node.js不会自动补全证书链,就会校验失败报错过期。
  • VS Code 扩展运行时使用的是VS Code内置的Node.js版本,而非你系统全局安装的Node.js,内置版本通常更新较慢,根证书信任库未同步最新数据也会导致校验失败。
忽略证书校验的实现方法

以下方法仅适用于个人自用场景,生产环境禁止使用,会导致数据传输存在中间人攻击风险

方法1:fetch请求单独配置

如果使用v2版本的node-fetch,直接在请求配置中添加rejectUnauthorized: false即可:

let response = await fetch('https://[mydomain]/api.php', {
  method: 'POST', 
  headers: headers, 
  body: body,
  rejectUnauthorized: false
});
const data = await response.json();

如果使用v3及以上版本的node-fetch,需要搭配自定义https agent使用:

const https = require('https');
const unsafeAgent = new https.Agent({  
  rejectUnauthorized: false
});

let response = await fetch('https://[mydomain]/api.php', {
  method: 'POST', 
  headers: headers, 
  body: body,
  agent: unsafeAgent
});
const data = await response.json();

方法2:全局配置关闭TLS校验

在代码入口最顶部添加环境变量配置即可全局生效:

process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:27:01