应将企业ca证书添加到node.js信任链,而非设置node_tls_reject_unauthorized=0;需导出pem格式ca证书、合并系统ca、通过node_extra_ca_certs环境变量注入,并在vscode的settings.json和launch.json中分别配置路径。

VSCode里Node进程报“unable to verify the first certificate”怎么办
这不是VSCode的问题,而是你本地启动的Node.js进程(比如调试、终端运行脚本、插件调用CLI)在企业网络下无法验证HTTPS响应证书——根本原因是公司代理做了SSL Inspection,签发了中间人证书,而Node.js默认不信任它。
为什么NODE_TLS_REJECT_UNAUTHORIZED=0不能乱设
这个环境变量会让所有Node.js HTTPS请求跳过证书校验,风险极高:任何中间人(包括恶意代理)都能解密你的API密钥、登录态、敏感数据。Claude Code、npm、axios、甚至VSCode内置的TypeScript语言服务都可能因此泄露凭证。
- 它影响的是整个Node.js进程,不是单个脚本
- 一旦写进
~/.zshrc或settings.json的env块,所有VSCode终端和调试会话都会继承 - CI/CD流水线若复用该配置,等于给生产环境开后门
正确做法:把公司CA加进Node.js信任链
企业IT部门提供的根证书(通常是.cer或.pem文件),必须显式注入Node.js的CA池,而不是绕过验证。
- 确认证书格式:用
file company-ca.cer检查是否为ASCII PEM(含-----BEGIN CERTIFICATE-----);如果不是,转成PEM:openssl x509 -inform DER -in company-ca.cer -out company-ca.pem - 合并系统CA + 公司CA:避免覆盖系统信任库,推荐新建一个bundle:
cat /etc/ssl/certs/ca-certificates.crt company-ca.pem > ~/node-ca-bundle.pem(Linux/macOS) - 设置环境变量只作用于VSCode:在
~/.vscode/settings.json里加"terminal.integrated.env.linux"(或对应macOS/Windows字段),值为{"NODE_EXTRA_CA_CERTS": "/Users/xxx/node-ca-bundle.pem"} - 验证是否生效:在VSCode集成终端执行
node -e "console.log(require('https').globalAgent.options.ca?.length)",输出应大于默认值(通常>100)
VSCode调试时仍失败?检查launch.json的env继承
VSCode调试器默认不继承终端环境变量,NODE_EXTRA_CA_CERTS需显式写进launch.json的env字段,否则断点调试时Node依然走默认CA池。
- 不要只配在
settings.json里就以为万事大吉 -
launch.json中每个configuration都要单独加:"env": {"NODE_EXTRA_CA_CERTS": "/path/to/bundle.pem"} - 如果用了WSL,注意路径是Windows还是Linux视角——
NODE_EXTRA_CA_CERTS路径必须指向WSL内可读的文件(如/home/user/bundle.pem,而非C:\...)
launch.json里写错,或者没同步到远程WSL/容器环境,导致调试时证书加载失败,但终端里npm install却正常——这种割裂感容易让人误判问题根源。











