vscode报ssl证书验证失败根本原因是环境割裂:图形界面不读shell变量,只依赖git全局配置或windows凭据管理器,导致证书路径错位、代理不一致或凭据缓存失效;应优先设http.sslbackend schannel或手动指定http.sslcainfo正确路径,而非禁用验证。

VSCode 报 SSL 证书验证失败,基本不是网络被墙,而是它调用 Git 或发起 HTTPS 请求时,找不到、读错了、或拒绝了本该信任的证书 —— 尤其在企业代理、自签名环境、WSL 或 Windows 凭据管理器混用场景下,十有八九是证书链断裂或配置错位。
Git clone 在终端能跑,VSCode 图形界面卡死或报 SSL certificate problem: unable to get local issuer certificate
这是最典型的「环境割裂」现象:终端里 git 继承了 shell 的 HTTP_PROXY 和系统证书路径,而 VSCode 图形命令(比如 Git: Clone)只读 git config --global 配置,且 Windows 下默认走 WinHTTP 而非 cURL,不自动加载 Git 自带的 ca-bundle.crt。
- 先确认当前生效的证书路径:
git config --global http.sslCAInfo;如果为空或路径不存在,就手动设对 - Windows 常见正确路径(注意带引号,含空格):
"C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt" - 更省事的兼容方案(推荐优先试):
git config --global http.sslBackend schannel—— 让 Git 直接用 Windows 系统证书库,避开路径问题 - 别直接
git config --global http.sslVerify false,VSCode 重启后可能失效,且掩盖真实配置缺陷
VSCode 自身 HTTPS 请求失败(Copilot 登录、扩展安装、更新下载)提示证书错误
这类错误和 Git 无关,是 VSCode 内核发起的网络请求(比如调 GitHub API 或下载 vscode-server),受 http.proxyStrictSSL 和系统证书信任链双重影响。
- 若你处于企业内网或使用代理工具(如 Clash、Clash for Windows),大概率是代理注入了自签名证书 —— VSCode 默认不信任
- 临时绕过:在
settings.json中加"http.proxyStrictSSL": false,但仅限开发机/可信网络 - 长期解法:把代理的根证书(.crt 或 .pem)路径加入
"security.allowedUNPKGCertificates"数组,例如:"security.allowedUNPKGCertificates": ["C:/Users/xxx/proxy-root.crt"] - WSL 场景特别注意:vscode-server 下载地址(
update.code.visualstudio.com)的证书若校验失败,错误日志会明确报出 host name 不匹配,此时必须用schannel或显式指定 CA 路径,禁用验证只是掩耳盗铃
为什么改了 Git 配置,VSCode 还是走旧凭据或弹窗反复认证?
因为 VSCode 图形界面的 Git 操作默认走 Windows 凭据管理器(Credential Manager),而不是 git config 里的 http.proxy 或 http.sslCAInfo。它甚至可能缓存了过期的 GitHub PAT 或错误的域名凭据。
- 清旧凭据:在 Windows 搜索栏打开「凭据管理器」→「Windows 凭据」→ 找到
git:https://github.com条目并删除 - 避免再存错:执行一次终端克隆(带 PAT):
git clone https://<token>@github.com/user/repo.git</token>,让 Git 自动存新凭据 - 禁用图形认证弹窗(非推荐,仅调试):在设置里关掉
git.authentication,但会导致部分功能(如 Push 前自动填 Token)失效 - 不要依赖
git config --global credential.helper store,VSCode 不读这个,它只认 Windows Credential Manager 或 macOS Keychain
真正麻烦的从来不是“怎么关 SSL 验证”,而是搞清哪一层在验证、用的是哪个证书源、谁在缓存凭据 —— Git、VSCode 主进程、VSCode Server、WSL 子系统,四者证书信任链可以完全独立。一个 http.sslCAInfo 配错,就足以让克隆卡在 80%,而你还在查代理端口对不对。











