在 Windows 中解决 zig fetch 的 TlsInitializationFailed 错误,可参考以下分步解决方案:
1. 配置 Git 使用 Windows 原生 TLS 后端 (推荐)
Zig 默认调用 Git 时可能因 TLS 后端不兼容导致失败。通过以下命令强制 Git 使用 Windows 内置的 SChannel 安全层:
powershell
git config --global http.sslBackend schannel
此设置利用系统证书存储,避免跨平台 TLS 库冲突 。
2. 更新 Zig 和 Git 到最新版本
- 更新 Zig :
从 https://ziglang.org/download/ 下载最新稳定版,覆盖安装。 - 更新 Git :
下载 https://git-scm.com/download/win 并安装,确保版本 ≥ 2.30(支持现代 TLS 协议)。
3. 验证系统证书信任
若使用自签名证书或企业内网证书:
- 打开 控制面板 > 管理工具 > 证书管理器。
- 在 受信任的根证书颁发机构 中导入 GitHub 或目标服务器的根证书。
- 重启终端后重试。
4. 设置环境变量强制 TLS 协议
在 PowerShell 中执行以下命令,限制 Git 使用 TLS 1.2(兼容性最佳):
powershell
$env:GIT_SSL_VERSION = "tlsv1.2"
$env:ZIG_PREFER_SYSTEM_GIT = "1" # 强制 Zig 使用系统 Git
zig fetch --save git+https://github.com/david-vanderson/dvui#main
5. 手动克隆仓库(绕过网络问题)
若网络限制导致 TLS 握手失败:
-
手动克隆仓库 :
powershellgit clone https://github.com/david-vanderson/dvui.git -
在
build.zig中引用本地路径 :zigconst dvui_dep = b.dependency("dvui", .{ .path = "D:\\nullclaw\\dvui" # 替换为实际路径 });
6. 检查防火墙/代理设置
-
禁用防火墙测试 :
临时关闭 Windows Defender 防火墙,确认是否拦截 Git 流量。 -
配置代理 :
若通过代理访问,设置 Git 代理:powershellgit config --global http.proxy http://proxyuser:proxypwd@proxyserver:port
7. 修复系统时间同步
TLS 依赖准确时间,若系统时间偏差超过 5 分钟会导致证书失效:
powershell
# 同步时间(需管理员权限)
w32tm /resync
8. 使用 Zig 的 --verbose 调试
获取更详细的错误信息以定位问题:
powershell
zig fetch --save git+https://github.com/david-vanderson/dvui#main --verbose
引用来源
- Git TLS 后端配置方法
- 系统证书信任与网络代理设置
- Zig 依赖管理最佳实践