如何为Node.js全局fetch提供HTTPS Agent或CA证书?
Node 18内置fetch设置TLS选项的原生方案说明
核心结论
Node 18内置的全局fetch遵循浏览器API规范,没有原生的直接方式来单独为其设置TLS选项(如自定义CA证书)。
可行方案
1. 使用undici Agent(需手动安装依赖)
Node.js的内置fetch基于undici实现,虽然undici未随Node.js默认分发,但可以手动安装后通过其Agent配置TLS选项,再作为dispatcher传入fetch:
- 第一步:安装undici
npm install undici
- 第二步:配置Agent并使用fetch
import { Agent } from 'undici'; import fs from 'fs'; // 配置包含TLS选项的Agent const customAgent = new Agent({ connect: { ca: fs.readFileSync('./custom-root-ca.pem'), // 加载自定义CA证书 rejectUnauthorized: true // 可选:控制是否验证服务器证书 } }); // 传入dispatcher使用配置好的Agent const response = await fetch('https://example.com', { dispatcher: customAgent });
2. 通过Node.js全局TLS配置(无需额外依赖)
如果不需要单独为fetch配置,而是希望全局生效,可以使用Node.js的环境变量NODE_EXTRA_CA_CERTS来指定额外的CA证书,该配置会对所有Node.js HTTP客户端(包括内置fetch)生效:
# 运行脚本时设置环境变量 NODE_EXTRA_CA_CERTS=./custom-root-ca.pem node your-app.js
内容的提问来源于stack exchange,提问作者everett1992
相关产品推荐
相关产品推荐

