使用 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 的信任列表中:
- 打开 Watt Toolkit,点击“打开证书文件夹”,找到
SteamTools.Certificate.cer
文件。 - 使用以下命令将证书路径添加到 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格式 |
.pem | Privacy Enhanced Mail格式文件 | 可以包含证书、私钥、公钥或CSR等数据 | 存储和传输加密数据,支持多种加密内容 | PEM格式(Base64编码) |
.der | Distinguished Encoding Rules格式文件 | 包含证书或公钥的二进制数据 | 用于需要紧凑格式的场景,如Java环境 | 二进制格式 |
.pfx | 个人交换格式文件 | 包含证书、私钥和CA链的加密文件 | 存储和传输证书和私钥,常用于Windows环境 | PKCS#12格式(通常需要密码保护) |
.p12 | 个人交换格式文件 | 包含证书、私钥和CA链的加密文件 | 存储和传输证书和私钥,常用于Windows环境 | PKCS#12格式(通常需要密码保护) |
.jks | Java KeyStore文件 | 包含证书、私钥和密钥对的Java专用格式 | 用于Java应用程序中存储和管理密钥 | 二进制格式(由keytool 管理) |
.keystore | 密钥库文件 | 包含证书、私钥和密钥对的通用格式 | 存储和管理密钥,支持多种加密工具 | 二进制格式 |
.crl | 证书吊销列表 | 包含被吊销的证书序列号 | 检查证书是否已被吊销 | PEM或DER格式 |
.p7b | PKCS#7格式的证书链文件 | 包含证书链的集合,但不包含私钥 | 存储和传输证书链 | PEM或DER格式 |
.p7c | PKCS#7格式的证书链文件 | 包含证书链的集合,但不包含私钥 | 存储和传输证书链 | PEM或DER格式 |
说明:
- PEM格式:以
-----BEGIN ... -----
开头,-----END ... -----
结尾的Base64编码格式。 - DER格式:二进制格式,不可直接读取,常用于需要紧凑存储的场景。
- PKCS#12格式:用于存储证书和私钥的加密文件,通常需要密码保护。