vscode插件市场“证书过期”问题根源在于系统根证书库失效:windows需用certutil -generatesstfromwu更新roots.sst,macos需在“系统”钥匙串中将自签名ca证书设为“始终信任”,并彻底退出vscode生效;镜像源和代理设置无法绕过签名验证。

VSCode插件市场提示“证书过期”无法下载,基本不是插件或网络本身的问题,而是你的系统信任的根证书库已失效——尤其是 Windows 的 roots.sst 未更新,或 macOS 钥匙串里企业自签名根证书过期且未设“始终信任”。修复必须从系统层入手,改 VSCode 设置或换镜像源只能绕过部分现象,无法解决签名验证失败这个核心拦截点。
Windows:用 certutil 强制更新根证书库
这是最常见也最有效的解法。错误表现包括:XHR failed、0x80072F0D、扩展页空白、安装卡在“Downloading…”。根本原因是系统内置的根证书列表(roots.sst)长期未同步微软证书服务器,导致无法验证 marketplace.visualstudio.com 或 vscode.cdn.azure.cn 返回的 HTTPS 证书链。
- 必须以管理员身份运行 PowerShell —— 普通权限下
certutil无权写入系统证书存储 - 执行命令:
certutil -generateSSTFromWU roots.sst(注意是-generateSSTFromWU,不是拼错的romWU) - 命令会从 Windows Update 自动拉取最新根证书包,耗时约 10–60 秒,期间无进度提示,耐心等待返回 “CertUtil: -generateSSTFromWU command completed successfully.”
- 执行后无需重启系统,但必须完全退出 VSCode(不是 Reload Window),否则旧证书缓存仍在内存中
macOS:重装并手动设为“始终信任”的自签名根证书
如果你在 VSCode 终端里跑 curl 或 Node.js 请求内部 API 报 SELF_SIGNED_CERT_IN_CHAIN,而浏览器能正常访问,大概率是钥匙串里公司/内网 CA 的根证书过期了。VSCode(及其内置终端调用的 Node)只认“系统”钥匙串 + NODE_EXTRA_CA_CERTS,不走浏览器私有证书库。
- 打开“钥匙串访问”,搜索公司名或 CA 名称,确认对应证书状态是否为“已过期”或“此证书已被标记为不受信任”
- 双击证书 → “显示简介” → 展开“信任” → “当使用此证书时”下拉选“始终信任” → 关闭窗口并输入密码保存(这步漏掉就无效)
- 务必安装到“系统”钥匙串,不是“登录”;若只有 .pem/.cer 文件,直接双击即可弹出安装位置选择
- 彻底退出 VSCode(Activity Monitor 里确认
Code Helper进程已消失),再重开,否则终端仍沿用旧信任链
VSCode 配置镜像源 ≠ 绕过证书验证
很多人以为把 extensions.gallery.serviceUrl 改成 https://vscode.cdn.azure.cn/_apis/public/gallery 就能解决问题,其实不能。镜像源只是转发请求,VSCode 下载完 .vsix 后仍会本地校验其微软签名,而签名验证依赖系统证书链。如果根证书过期,哪怕你从镜像源下载成功,最后一步也会报“无法验证安装源”。
- 镜像配置仅解决 DNS 解析失败或 CDN 访问慢,不解决证书链断裂
- 必须确保
serviceUrl和cacheUrl域名一致,且cacheUrl末尾带/publishers路径,否则 publisher 列表加载失败,扩展页仍为空 - 改完设置后必须完全退出 VSCode,否则设置不生效(VSCode 不热重载 gallery 配置)
-
http.proxyStrictSSL: false只影响代理连接阶段,不影响 .vsix 下载后的签名解压校验
别让 Fiddler 成为“永久开关”
有些用户发现一开 Fiddler,VSCode 插件市场立刻恢复正常——这不是问题被修好了,而是 Fiddler 作为中间人代理,生成了自己的证书并自动注入系统信任链,临时绕过了原证书验证。这等于主动关闭 HTTPS 安全机制,所有流量都经由 Fiddler 解密转发,存在严重隐私泄露风险。
这种操作只能用于临时诊断(比如确认是不是证书问题),绝不能作为日常方案。真正要解决,就得回到系统证书库本身:Windows 更新 roots.sst,macOS 重置钥匙串信任策略。时间偏差超 ±5 分钟也会触发同样报错,顺手检查系统时间是否准确,比反复折腾代理更省事。











