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

Node.js 进程报 “unable to verify the first certificate” 怎么办
这不是 VSCode 本身的问题,而是你本地启动的 node 进程(比如调试、终端运行脚本、插件调用 CLI)在企业网络下无法验证 HTTPS 响应证书。根本原因是公司代理做了 SSL Inspection,签发了中间人证书,而 Node.js 默认不信任它。
常见现象包括:npm install 失败、axios 请求抛出 Error: unable to verify the first certificate、VSCode 调试时卡在 HTTPS 请求、Tabnine 或 Git 扩展无法连接内网服务。
- 不要设
NODE_TLS_REJECT_UNAUTHORIZED=0—— 它会让所有 HTTPS 请求跳过校验,API 密钥、登录态、敏感数据全暴露给中间人 - 这个变量影响整个 Node.js 进程,不是单个脚本;写进
~/.zshrc或settings.json的env块,会导致所有终端和调试会话继承 - CI/CD 流水线若复用该配置,等于给生产环境开后门
如何把企业 CA 正确加进 Node.js 信任链
必须显式注入 PEM 格式的根证书到 Node.js 的 CA 池,而不是绕过验证。
使用一条命令部署ProbeChain Rydberg测试网代理节点。自动注册为Agent(NodeType=1),免gas,支持macOS/Linux/Windows。触发词:/r
- 从 IT 部门获取企业根证书(通常是
.cer或.pem文件),确认是 PEM 格式;如果不是,用openssl x509 -inform DER -in company-ca.cer -out company-ca.pem转换(Linux/macOS) - 合并系统 CA 和企业 CA:用
cat /etc/ssl/certs/ca-certificates.crt company-ca.pem > node-ca-bundle.pem(Linux)或cat /etc/ssl/cert.pem company-ca.pem > node-ca-bundle.pem(macOS) - 保存路径要可被 Node.js 读取:推荐放在用户目录下,如
/home/xxx/node-ca-bundle.pem(Linux)或/Users/xxx/node-ca-bundle.pem(macOS)
VSCode 终端和调试器怎么分别配 NODE_EXTRA_CA_CERTS
NODE_EXTRA_CA_CERTS 环境变量只作用于当前进程,而 VSCode 的终端和调试器不共享环境变量,必须分开配置。
- 终端生效:在
settings.json中按平台加字段,例如 Linux:"terminal.integrated.env.linux": {"NODE_EXTRA_CA_CERTS": "/home/xxx/node-ca-bundle.pem"} - 调试器生效:必须显式写进
launch.json的env字段,否则断点调试时 Node 仍走默认 CA 池;示例:"env": { "NODE_EXTRA_CA_CERTS": "/home/xxx/node-ca-bundle.pem" } - 如果用了 WSL,路径必须是 WSL 内视角(如
/home/user/bundle.pem),不是 Windows 路径(如C:\certs\bundle.pem) - 验证是否生效:在 VSCode 集成终端执行
node -e "console.log(require('https').globalAgent.options.ca?.length)",输出应大于默认值(通常 >100)
为什么 VSCode 自身组件(如 Remote-SSH、Git)还是报错
VSCode 基于 Electron,复用 Chromium 网络栈,只信任操作系统级证书存储(Windows Cert Store / macOS Keychain / Linux ca-certificates),但不会自动加载企业私有 CA;尤其在国产化系统(麒麟 V10、统信 UOS)中,系统证书库默认不含内部 CA。
-
net::ERR_CERT_AUTHORITY_INVALID会出现在 Git 操作、扩展更新、Remote-SSH 元数据同步等场景 - 即使
git config --global http.sslVerify false临时绕过,也无法解决 Tabnine 或 Remote-SSH 的 TLS 握手失败 - 对 Remote-SSH 和部分扩展,还需额外配置:
"http.proxyStrictSSL": false(仅限内网可信环境),以及"remote.SSH.enableAgentForwarding": true复用系统 SSH 代理的信任链 - VSCode 2026 版本已强制启用 SM2/SM4 国密支持,但若私有 CA 未签发 SM2 根证书,仍会校验失败
launch.json 里写错,或者没同步到远程 WSL/容器环境,导致调试时证书加载失败,但终端里 npm install 却正常——这种割裂感容易让人误判问题根源。

















