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

如何正确配置Node.js以信任自签名根CA证书解决TLS请求报错

问题原因排查

你之前尝试的方案未生效核心是几个Node.js版本特性和执行顺序的坑:

  • NODE_EXTRA_CA_CERTS 仅在 Node.js 进程启动时读取,运行时通过 process.env 赋值不会生效,你之前的测试逻辑无法验证该环境变量是否正常加载。
  • Node.js v15 版本中直接修改 tls.rootCertificates 数组不生效,该数组仅为内置根证书的静态快照,修改后不会同步到 TLS 校验逻辑中。
  • 你写的 tls.createSecureContext 猴子补丁如果在 node-fetch 模块加载之后才执行,node-fetch 会保留对原生方法的引用,补丁不会生效。
可行解决方案

方案1:给node-fetch传入自定义HTTPS代理(最稳妥,无全局污染)

不需要修改任何全局配置,仅针对目标接口的请求添加自定义CA,安全性最高:

const fetch = require('node-fetch');
const https = require('https');
const fs = require('fs');

// 替换为你的自签名根CA证书绝对路径
const rootCA = fs.readFileSync('/full/path/to/your/rootCA.pem');
// 生成自定义TLS代理
const customAgent = new https.Agent({
  ca: rootCA
});

// 调用fetch时传入agent参数即可
const res = await fetch('https://myapi.dev.local/your/api/path', {
  agent: customAgent
});
// 后续正常处理返回结果即可

方案2:全局生效配置

如果需要所有请求都信任该自签名CA,按照以下步骤操作:

  1. 启动Node进程前就配置好环境变量,不要在代码中赋值,启动命令示例:
NODE_EXTRA_CA_CERTS=/full/path/to/your/rootCA.pem node your-app-entry.js

注意必须使用证书的绝对路径,避免进程运行目录变化导致找不到文件。如果使用pm2等进程管理工具,需要把该环境变量写到进程配置的env字段中。


注意:如果上述操作后仍然报错,需要检查你的 API 站点证书是否配置了正确的「主题备用名称(SAN)」,Node.js 15+ 不再支持将证书通用名(CN)作为域名校验依据,必须在 SAN 字段中明确加入你要访问的域名 myapi.dev.local 才能通过校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:30:05