如何在VSCode中排查Node环境由于缺少相关根证书导致接口报错

P粉328763957

P粉328763957

2026-07-15

701人浏览

原创

node.js https请求报cert_has_expired或unable_to_verify_leaf_signature错误,根本原因是tls证书验证失败,常见于系统根证书缺失/过期、node.js未正确加载ca证书包、或目标服务证书配置异常;vscode终端、调试器及插件均复用同一tls逻辑,需按环境(windows/macos/linux)分别检查系统时间、证书路径、node_extra_ca_certs配置及进程上下文继承性。

如何在vscode中排查node环境由于缺少相关根证书导致接口报错

Node.js HTTPS 请求报 CERT_HAS_EXPIRED 或 UNABLE_TO_VERIFY_LEAF_SIGNATURE

这类错误不是 VSCode 本身的问题,而是 Node.js 运行时在发起 HTTPS 请求时,无法验证服务器证书链——通常因为系统根证书缺失、过期,或 Node.js 没加载到正确的 CA 证书包。VSCode 内置终端、调试器、插件(如 REST Client、LeetCode)调用 node 执行时都会复用同一套 TLS 验证逻辑。

  • 先确认是否真是证书问题:在 VSCode 终端中运行 node -e "require('https').get('https://httpbin.org/get', r => r.on('data', console.log))",若抛出 CERT_HAS_EXPIREDUNABLE_TO_VERIFY_LEAF_SIGNATUREDEPTH_ZERO_SELF_SIGNED_CERT,基本可锁定
  • 注意区分:如果仅某个代理/内网服务报错,而公网地址(如 https://httpbin.org)正常,则更可能是目标服务用了自签名或私有 CA,而非全局根证书缺失
  • Windows 用户尤其容易踩坑:Node.js 默认使用 Windows CryptoAPI 获取系统证书,但若系统证书存储损坏、或企业策略禁用了某些根 CA(如 Sectigo、DigiCert 新根),Node 就会失败;macOS/Linux 则依赖 OpenSSL 的 ca-bundle.crt 路径

检查 Node.js 实际使用的 CA 证书路径

Node.js 启动时会按顺序查找 CA 证书源,顺序错了就可能跳过你更新的证书。执行以下命令查看当前生效路径:

node -p "require('crypto').constants.SSL_OP_NO_TLSv1_3"

这本身不输出路径,但配合环境变量更有效:

VSCode 1.118
VSCode 1.118

微软正式发布 Visual Studio Code 1.118 版本 。本次更新重点强化了 AI 开发体验与企业管理能力,其中最引人注目的是新增 Copilot CLI 远程控制功能,允许开发者通过手机或网页远程监控和接管 AI 会话 。同时,为了提高 AI 的运行性价比,新版本优化了令牌缓存策略以降低成本 。此外,1.118 版还引入了 Chronicle 本地历史追踪、TypeScript 7.0 支持以及更严格的企业级访问管控 。

下载
  • 运行 node -p "process.env.NODE_EXTRA_CA_CERTS":若返回非空字符串,说明已手动指定证书文件,优先级最高
  • 运行 node -p "require('tls').rootCertificates.length":返回数字,正常应 ≥ 100;若为 0 或极小(如 1~2),说明 CA 包根本没加载成功
  • 检查 node -p "require('https').globalAgent.options.ca":返回 null 表示用默认系统 CA;返回数组则说明已被显式覆盖

Windows 上修复根证书缺失(nvm-windows / 手动安装场景)

nvm-windows 默认不重装系统证书,且 Node.js 安装包(尤其是旧版)自带的 ca.pem 已严重过期。手动补救最直接:

  • 下载最新 Mozilla CA 包:https://www.php.cn/link/5fe4dadcdb001d8566cd20e6d8a20251,保存为 C: ode-cacacert.pem(路径无空格、无中文)
  • 在 VSCode 设置(settings.json)中添加:
    "terminal.integrated.env.windows": { "NODE_EXTRA_CA_CERTS": "C:\node-ca\cacert.pem" }
  • 调试时需额外注入:在 launch.jsonenv 字段里加 "NODE_EXTRA_CA_CERTS": "C:\node-ca\cacert.pem",否则调试器进程不继承终端环境变量
  • 避免改 http.Agent 代码绕过校验:临时设 rejectUnauthorized: false 只能用于开发,上线等于裸奔

macOS/Linux 下证书更新不生效的典型原因

Homebrew 安装的 Node.js 通常依赖系统 OpenSSL,但 macOS Sequoia 后系统证书管理逻辑变更,导致 update-ca-certificatesbrew reinstall openssl 不一定同步到 Node.js:

  • 确认 Node.js 是否用 Homebrew OpenSSL:运行 node -p "require('crypto').getDiffieHellman('modp15')" 不报错才说明 OpenSSL 正常加载;若报 Error: Cannot find module 'crypto',说明二进制链接异常
  • 不要依赖 export NODE_EXTRA_CA_CERTS=/etc/ssl/certs/ca-certificates.crt:macOS 根本没有这个路径,正确路径是 /etc/ssl/cert.pem(由 security find-certificate -p -s -t > /etc/ssl/cert.pem 生成)
  • VSCode 从 Dock 启动时,不会读取 ~/.zshrc 中的环境变量:必须通过 code . 从终端启动,或在 settings.json 中显式设置 terminal.integrated.env.linux/terminal.integrated.env.osx

真正麻烦的不是找不到证书,而是不同上下文(终端、调试器、插件进程)各自加载 CA 的路径和时机完全不同。一个 NODE_EXTRA_CA_CERTS 环境变量,在终端里生效,不代表调试器或 LeetCode 插件就能看到。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

vscode node node.js

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
硬盘接口类型介绍
硬盘接口类型介绍

硬盘接口类型有IDE、SATA、SCSI、Fibre Channel、USB、eSATA、mSATA、PCIe等等。详细介绍:1、IDE接口是一种并行接口,主要用于连接硬盘和光驱等设备,它主要有两种类型:ATA和ATAPI,IDE接口已经逐渐被SATA接口;2、SATA接口是一种串行接口,相较于IDE接口,它具有更高的传输速度、更低的功耗和更小的体积;3、SCSI接口等等。

2023.10.19

2766

3

PHP接口编写教程
PHP接口编写教程

本专题整合了PHP接口编写教程,阅读专题下面的文章了解更多详细内容。

2025.10.17

2120

12

php8.4实现接口限流的教程
php8.4实现接口限流的教程

PHP8.4本身不内置限流功能,需借助Redis(令牌桶)或Swoole(漏桶)实现;文件锁因I/O瓶颈、无跨机共享、秒级精度等缺陷不适用高并发场景。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2025.12.29

3356

9

java接口相关教程
java接口相关教程

本专题整合了java接口相关内容,阅读专题下面的文章了解更多详细内容。

2026.01.19

160

15

vscode是什么_vscode怎么安装配置
vscode是什么_vscode怎么安装配置

VS Code(Visual Studio Code)是一款免费、开源的跨平台代码编辑器,由微软开发和维护。它被广泛用于软件开发和编程,支持多种编程语言和框架。VS Code 同时提供了丰富的功能和扩展性,使开发者可以高效地编写、编辑和调试代码。

2023.06.30

745

18

vscode怎么运行代码
vscode怎么运行代码

vscode是一个运行于MacOS X、Windows和Linux之上的,针对于编写现代Web和云应用的跨平台源代码编辑器;vscode免费而且功能强大,对JavaScript和NodeJS的支持非常好,自带很多功能,例如代码格式化,代码智能提示补全、Emmet插件等。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.07.21

1133

3

vscode使用的框架介绍
vscode使用的框架介绍

VSCode是一款跨平台代码编辑器,它基于Electron框架和Monaco Editor构建。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

980

12

vscode一般用来写什么语言
vscode一般用来写什么语言

VSCode是一款功能强大的代码编辑器,支持多种编程语言和文件格式。它内置对 JavaScript、Python、Java、C++、TypeScript、HTML/CSS、Go 等语言的支持。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.14

906

8

vscode可以写什么语言
vscode可以写什么语言

vscode是一款强大的代码编辑器,支持多种编程语言的开发。通过安装扩展,可以为 JavaScript/TypeScript、Python、Java、C#、PHP、Go、Ruby、Rust、HTML/CSS 等语言提供智能代码补全、调试和格式化等功能。想了解更多vscode的相关内容,可以阅读本专题下面的文章。

2024.03.15

1407

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程