Skip to content

🔨 修复加速后 Git for Windows(含 SDK、自动更新)无法访问 GitHub:本地提供 CRL 并为 MITM 证书添加吊销分发点 - #4126

Open
PtJade-Ceramic wants to merge 2 commits into
BeyondDimension:developfrom
PtJade-Ceramic:fix/accelerator-crl-revocation
Open

PtJade-Ceramic wants to merge 2 commits into
BeyondDimension:developfrom
PtJade-Ceramic:fix/accelerator-crl-revocation

Conversation

@PtJade-Ceramic

@PtJade-Ceramic PtJade-Ceramic commented Aug 7, 2026

Copy link
Copy Markdown

修复内容

修复启用加速后 Git for Windows / Git for Windows SDK / Git for Windows 的自动更新无法访问GitHub 的问题(curl 报 CRYPT_E_NO_REVOCATION_CHECK (0x80092012) / curl: (35) ... schannel)。

根因

加速开启后 github.comapi.github.com 等域名被 hosts 指向 127.0.0.1,由反代终止 TLS。反代用本地根 CA 现场签发的叶子证书缺少 CRL 分发点(CDP)扩展 —— 实测该证书 No extensions in certificate,既没有 CDP 也没有 AIA。Schannel(Git for Windows 自带的 curlgit.exe 使用的 TLS 后端)强制检查吊销状态,拿不到吊销信息即判失败,
TLS 握手因此直接被拒:

curl: (35) schannel: next InitializeSecurityContext failed:
      CRYPT_E_NO_REVOCATION_CHECK (0x80092012) - 吊销功能无法检查证书是否吊销。

影响面

  • Git for Windows SDK 内的 curlgit ls-remote 等直接失败。
  • Git for Windows 的每日更新检查是静默失效的:安装器创建的计划任务 Git for Windows Updatergit-bash.exe --hide --no-needs-console --command=cmd\git.exe update-git-for-windows --quiet --gui 运行;git-update-git-for-windowshttp_get() 拿到退出码 35 后走 case $?,"$proxy" in 7,) ...;; *) return;; 静默返回,stderr 又被 --hide 吞掉,界面上没有任何提示,任务只留一个非零结果(实测 LastTaskResult = 35),于是开启加速的用户长期收不到更新提示。
  • 上游 Git for Windows 自带的 git-update-git-for-windows 同样没有传 --ssl-revoke-best-effort,因此官方安装也一样受影响。本 PR 从服务端修复,对所有 Schannel 客户端都生效,不依赖它们各自加参数。

改动

  • 反代服务在本机新增一个 CRL 服务(http://127.0.0.1:{CrlPort}/crl),对外提供由本地根 CA 签名的空 CRL。
  • 为 MITM 叶子证书添加 CRL 分发点扩展(OID 2.5.29.31),指向上述本地 CRL 服务。
  • 新增单元测试覆盖:CDP 扩展、空 CRL 签发者、吊销检查回归、CRL 端点及 X509RevocationMode.Online 链构建。

验证

  • 单元测试 5/5 通过。
  • 真机验证:启用加速后 curl -v https://github.com 正常返回 HTTP 200 与完整页面;
    git ls-remote 正常拉取引用列表。

临时规避(客户端侧,无需升级加速器)

在加速器更新到包含本修复的版本之前,受影响的客户端可以这样解围:

curl 参数 行为 本机实测(加速开启,api.github.com 被劫持到 127.0.0.1
(默认) 吊销信息缺失即失败 curl: (35) ... CRYPT_E_NO_REVOCATION_CHECK (0x80092012),退出码 35
--ssl-revoke-best-effort 推荐:只在吊销信息缺失或吊销服务不可达时放行;吊销状态已知且为已吊销时仍拒绝(Schannel 构建的 curl ≥ 7.70) HTTP 200
--ssl-no-revoke 彻底关闭吊销检查(所有站点、所有时刻),安全性下降较多 HTTP 200

Fixes #4123

@PtJade-Ceramic PtJade-Ceramic changed the title 🔨 修复加速后 Git for Windows SDK 无法访问 GitHub:本地提供 CRL 并为 MITM 证书添加吊销分发点 🔨 修复加速后 Git for Windows(含 SDK、自动更新)无法访问 GitHub:本地提供 CRL 并为 MITM 证书添加吊销分发点 Sep 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

🐛[BUG] 启用加速后 Schannel 客户端(Git for Windows / SDK / 自动更新)无法访问 GitHub

1 participant