使用 watt toolkit 进行网络加速为什么会导致使用 git 时发生自签名证书问题的报错
CAWatt Toolkitgithubhttpsssl证书

使用 watt toolkit 进行网络加速为什么会导致使用 git 时发生自签名证书问题的报错

更新于 2025-03-14
2779

使用 Watt Toolkit(原 Steam++)进行网络加速时,可能会导致 Git 报错“SSL certificate problem: unable to get local issuer certificate”,这是因为 Watt Toolkit 使用了自签名证书来代理网络请求。这种自签名证书并非由受信任的证书颁发机构(CA)签发,因此 Git 默认会拒绝连接。

问题分析

Git 和浏览器的证书信任机制不同

在 Windows 上,即使 Watt Toolkit 的自签名证书已被导入到证书管理器的“受信任的根证书颁发机构”中,Git 仍然可能不信任该证书,原因是Git 和浏览器的证书信任机制不同。浏览器通常会直接使用操作系统的证书存储来验证 SSL 证书,而Git 在 Windows 上默认不使用系统的证书存储来验证 SSL 证书。而是依赖于配置文件或默认的证书文件(如 C:\Program Files\Git\mingw64\etc\ssl\certs\ca-bundle.crt)。

解决方案

1. 禁用 SSL 证书验证

通过命令禁用 Git 的 SSL 证书验证。这种方法简单直接,但会降低安全性,因为 Git 不再验证服务器的身份。

bash
git config --global http.sslVerify false

2. 导入 Watt Toolkit 的自签名证书

将 Watt Toolkit 的自签名证书导入到 Git 的信任列表中:

  1. 打开 Watt Toolkit,点击“打开证书文件夹”,找到 SteamTools.Certificate.cer 文件。
  2. 使用以下命令将证书路径添加到 Git 配置中(路径需替换为实际路径):
powershell
git config --global http.sslCAInfo C:\Users\huayemao\AppData\Local\Steam++\Plugins\Accelerator\SteamTools.Certificate.cer

这样可以让 Git 使用 Watt Toolkit 的证书进行验证。

如果要重置:

powershell
git config --global --unset http.sslCAInfo

自签名证书

自签名证书是由证书所有者自己生成和签名的数字证书,而非由证书颁发机构(CA)签发。它基于公钥和私钥体系,能够加密数据传输,但缺乏外部验证,因此信任度低,浏览器会显示警告。自签名证书通常用于内部网络、开发测试环境或临时解决方案,不适合面向公众的网站。

相比之下,外部验证是指通过CA对证书进行签发和验证的过程。CA签发证书时,会用自己的私钥对证书签名,证书包含公钥、组织信息等。当客户端与服务器建立连接时,服务器会将整个证书链(包括服务器证书、中间CA证书等)发送给客户端。客户端在验证证书时,会使用CA的公钥解密签名,验证证书的合法性。如果证书由中间CA签发,客户端会逐级验证证书链,直到找到根CA证书。根CA证书通常预置在客户端系统中,是受信任的。

证书链的验证过程如下:假设证书链为“根CA -> 中间CA -> 服务器证书”,客户端首先用中间CA的公钥验证服务器证书的签名,再用根CA的公钥验证中间CA证书的签名。只要每一步签名验证通过,且根CA证书受信任,整个证书链就被认为是合法的。

总结:自签名证书适合内部使用,但缺乏信任;外部验证通过CA签发和逐级验证证书链,确保证书的合法性和可信度。

windows 证书管理

在 Windows 上,可以使用 certmgr.msc 工具管理证书

证书相关文件格式后缀

后缀含义内容用途常见格式
.cert
.crt
.cer
证书文件包含证书的主体信息、公钥和签名信息存储和传输证书PEM或DER格式
.key私钥文件包含私钥数据加密和签名操作,私钥必须保密PEM格式(加密或未加密)
.pub公钥文件包含公钥数据加密数据或验证签名,公钥可以公开分发PEM格式
.csr证书签名请求包含申请者的公钥、身份信息和签名向CA申请证书PEM格式
.pemPrivacy Enhanced Mail格式文件可以包含证书、私钥、公钥或CSR等数据存储和传输加密数据,支持多种加密内容PEM格式(Base64编码)
.derDistinguished Encoding Rules格式文件包含证书或公钥的二进制数据用于需要紧凑格式的场景,如Java环境二进制格式
.pfx个人交换格式文件包含证书、私钥和CA链的加密文件存储和传输证书和私钥,常用于Windows环境PKCS#12格式(通常需要密码保护)
.p12个人交换格式文件包含证书、私钥和CA链的加密文件存储和传输证书和私钥,常用于Windows环境PKCS#12格式(通常需要密码保护)
.jksJava KeyStore文件包含证书、私钥和密钥对的Java专用格式用于Java应用程序中存储和管理密钥二进制格式(由keytool管理)
.keystore密钥库文件包含证书、私钥和密钥对的通用格式存储和管理密钥,支持多种加密工具二进制格式
.crl证书吊销列表包含被吊销的证书序列号检查证书是否已被吊销PEM或DER格式
.p7bPKCS#7格式的证书链文件包含证书链的集合,但不包含私钥存储和传输证书链PEM或DER格式
.p7cPKCS#7格式的证书链文件包含证书链的集合,但不包含私钥存储和传输证书链PEM或DER格式

说明:

  1. PEM格式:以-----BEGIN ... -----开头,-----END ... -----结尾的Base64编码格式。
  2. DER格式:二进制格式,不可直接读取,常用于需要紧凑存储的场景。
  3. PKCS#12格式:用于存储证书和私钥的加密文件,通常需要密码保护。