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

如何解决Node.js中fetch请求的unable to get local issuer certificate错误

解决Node.js Fetch请求的UNABLE_TO_GET_ISSUER_CERT_LOCALLY错误

问题场景

发起Node.js fetch请求时,抛出以下错误:

{"errorType":"TypeError","errorMessage":"fetch failed","cause":{"errorType":"Error","errorMessage":"unable to get local issuer certificate","code":"UNABLE_TO_GET_ISSUER_CERT_LOCALLY"}}

已在yarn config中配置以下内容,但问题未解决:

NODE_TLS_REJECT_UNAUTHORIZED: '0',
cafile: 'C:\\Users\\vishnu\\.certs\\all.pem',

其中all.pem为从浏览器下载的目标API证书。

可行修复方案

1. 确认证书文件的完整性

  • 检查all.pem是否包含完整的证书信任链(根证书+中间证书+服务器证书)。浏览器下载的通常仅为服务器证书,缺少链上的中间/根证书会导致Node.js无法完成验证。
  • 可以用openssl命令导出完整证书链:
    openssl s_client -connect 目标API域名:443 -showcerts
    
    将输出中所有-----BEGIN CERTIFICATE-----至-----END CERTIFICATE-----的内容全部复制到all.pem文件中。

2. 在fetch请求中显式指定CA证书

绕过全局配置,直接在fetch请求的参数中传入CA证书:

const fs = require('fs');
const https = require('https');

const caCert = fs.readFileSync('C:\\Users\\vishnu\\.certs\\all.pem');

fetch('https://目标API域名', {
  agent: new https.Agent({
    ca: caCert
  })
})
.then(res => res.json())
.catch(err => console.error(err));

3. 确保NODE_TLS_REJECT_UNAUTHORIZED生效

  • 直接在启动脚本时设置环境变量,比yarn config更可靠:
    NODE_TLS_REJECT_UNAUTHORIZED=0 node 你的脚本文件名.js
    
  • 或者在代码开头添加:
    process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
    
    注意:此方法会禁用所有TLS证书验证,仅适合开发环境,生产环境严禁使用。

4. 将根证书导入系统信任存储

把目标API的根证书导入系统的受信任根证书颁发机构:

  • Windows:打开certmgr.msc,将证书导入「受信任的根证书颁发机构」
  • macOS:打开钥匙串访问,将证书设置为「始终信任」

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 13:33:14