如何解决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 - 或者在代码开头添加:
注意:此方法会禁用所有TLS证书验证,仅适合开发环境,生产环境严禁使用。process.env.NODE_TLS_REJECT_UNAUTHORIZED = '0';
4. 将根证书导入系统信任存储
把目标API的根证书导入系统的受信任根证书颁发机构:
- Windows:打开
certmgr.msc,将证书导入「受信任的根证书颁发机构」 - macOS:打开钥匙串访问,将证书设置为「始终信任」
内容的提问来源于stack exchange,提问作者Vishnu priya
相关产品推荐
相关产品推荐

