Node.js在VSCode中报UNABLE_TO_VERIFY_LEAF_SIGNATURE等证书错误,本质是HTTPS请求时无法验证企业代理或自签名CA证书,需通过设置NODE_EXTRA_CA_CERTS导入根证书PEM文件,终端与调试器(launch.json)须分别配置该环境变量。

VSCode 中 Node 环境出现证书报错(如 UNABLE_TO_VERIFY_LEAF_SIGNATURE、self signed certificate in certificate chain),本质是 Node.js 发起 HTTPS 请求时,无法验证企业代理或本地 CA 证书——不是 VSCode 本身的问题,而是 Node 进程信任链缺失。
Node 启动时 SSL 证书验证失败的典型表现
常见于公司内网、使用 Charles/Fiddler 抓包、或安装了自签名根证书的场景。错误通常出现在:
- 执行
npm install时卡住并报UNABLE_TO_VERIFY_LEAF_SIGNATURE -
node脚本中用https.request()或axios请求内部服务返回证书错误 - LeetCode 插件登录失败,控制台显示 TLS 握手异常
注意:这类报错和 node -v 是否能运行无关,它只在实际发起 HTTPS 连接时触发。
临时绕过证书校验(仅限开发/测试)
不推荐长期使用,但可快速验证是否为证书问题:
- 在 VSCode 终端中执行前,先设置环境变量:
set NODE_TLS_REJECT_UNAUTHORIZED=0(Windows PowerShell)或export NODE_TLS_REJECT_UNAUTHORIZED=0(macOS/Linux) - 或者在启动命令前加前缀:
NODE_TLS_REJECT_UNAUTHORIZED=0 npm install - ⚠️ 风险:所有 HTTPS 请求将跳过证书校验,敏感操作(如 npm publish)绝不可用此方式
正确导入企业/自签名 CA 证书到 Node 信任链
Node 不读取系统证书库(如 Windows 的 certmgr.msc 或 macOS 的钥匙串),必须显式指定额外证书路径:
- 导出你的根证书为 PEM 格式(例如
D:certscompany-root.crt),确保内容以-----BEGIN CERTIFICATE-----开头 - 设置环境变量
NODE_EXTRA_CA_CERTS指向该文件:$env:NODE_EXTRA_CA_CERTS="D:certscompany-root.crt"(PowerShell) - 永久生效:在 VSCode 的
settings.json中添加:"terminal.integrated.env.windows": { "NODE_EXTRA_CA_CERTS": "D:\certs\company-root.crt" } - 验证是否生效:重启 VSCode 终端后运行
node -e "console.log(process.env.NODE_EXTRA_CA_CERTS)",应输出路径
VSCode 调试器(launch.json)下证书失效怎么办
调试器启动的 Node 进程默认不继承终端的环境变量,所以即使终端里 NODE_EXTRA_CA_CERTS 有效,launch.json 仍可能失败:
- 在
launch.json的配置项中显式注入:"env": { "NODE_EXTRA_CA_CERTS": "D:\certs\company-root.crt" } - 不要依赖
process.env动态读取——调试器启动时环境尚未加载 shell 配置 - 如果用
runtimeExecutable指定了特定node.exe,确保该 Node 实例也支持该环境变量(所有现代 Node 版本均支持)
证书问题最常被忽略的点:VSCode 内置终端和调试器是两套独立环境,改了终端 PATH 或 env 变量,不等于调试器也能用。必须分别确认两者都加载了 NODE_EXTRA_CA_CERTS。


















