Git克隆GitLab仓库遇SSL证书问题 求安全解决方案
GitLab SSL证书问题解决方案及相关疑问解答
1. .crt证书是什么?
你猜的方向完全正确,.crt是一种数字身份凭证,相当于远程Git服务器的“合法身份证”。当你的电脑和Git服务器建立加密连接时,服务器会出示这个证书,你的电脑通过它确认连接的是真的公司GitLab服务器,不是伪造的钓鱼服务器,以此保证数据传输的安全。
2. 如何正确获取该证书?
两种简单可行的方法:
- 浏览器导出法:打开公司GitLab网页(
https://git.company.com),点击地址栏的锁形图标 → 选择“证书” → 切换到“详细信息”标签页 → 点击“复制到文件”,按向导选择「Base64编码的X.509(.CER)」格式,保存成后缀为.crt的文件。 - 命令行导出法(用Git自带的OpenSSL工具,在Git Bash里执行):
openssl s_client -connect git.company.com:443 </dev/null | sed -n '/-----BEGIN CERTIFICATE-----/,/-----END CERTIFICATE-----/p' > company-git.crt
执行后会在当前目录生成company-git.crt文件,这就是服务器的证书。
3. 证书应存放在开发机器的哪个位置?
找一个固定、不会被误删或覆盖的目录,比如专门创建C:\GitCerts文件夹,把证书放在这里。不要存到Git安装目录(比如C:/Program Files/Git/mingw64/ssl/certs),因为Git更新时可能会清空或替换这个目录里的文件,导致证书失效。
4. 如何配置Git使用该证书?
分两种配置范围,按需选择:
- 全局配置(所有Git仓库生效):在Git Bash或PowerShell里执行:
git config --global http.sslCAInfo "C:/GitCerts/company-git.crt"
- 单个仓库配置(仅当前仓库生效):先进入目标仓库的本地目录,再执行:
git config http.sslCAInfo "C:/GitCerts/company-git.crt"
配置完成后,可用以下命令验证设置是否成功:
- 检查全局配置:
git config --global --get http.sslCAInfo - 检查单个仓库配置:
git config --get http.sslCAInfo
5. 此场景下SSH与SSL的区别?
两者都是加密传输方式,但身份验证逻辑完全不同:
- SSL(HTTPS方式):靠账号密码或个人访问令牌(PAT)登录,连接时必须验证服务器的.crt证书,确保服务器合法,使用
https://开头的仓库地址。你现在遇到的就是SSL证书验证失败的问题。 - SSH方式:不需要密码,靠本地的SSH密钥对验证身份——私钥存在你的电脑上,公钥添加到你的GitLab账号里,使用
git@git.company.com:dev/myproject.git这类地址,不需要依赖SSL证书,能直接绕开当前的证书问题,但需要提前配置SSH密钥。
附:VonC方案命令输出的中文翻译
假设你执行命令后得到如下英文输出:
CONNECTED(000001A8) depth=0 CN = git.company.com verify error:num=20:unable to get local issuer certificate verify return:1 depth=0 CN = git.company.com verify error:num=21:unable to verify the first certificate verify return:1 --- Certificate chain 0 s:CN = git.company.com i:CN = Company Internal CA --- Server certificate -----BEGIN CERTIFICATE----- ...(证书内容)... -----END CERTIFICATE----- subject=CN = git.company.com issuer=CN = Company Internal CA --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 2100 bytes and written 365 bytes Verification error: unable to get local issuer certificate --- New, TLSv1.3, Cipher is TLS_AES_256_GCM_SHA384 Server public key is 2048 bit Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 20 (unable to get local issuer certificate) ---
翻译成中文:
已连接(000001A8) 深度=0 CN = git.company.com 验证错误:编号=20:无法获取本地颁发者证书 验证返回:1 深度=0 CN = git.company.com 验证错误:编号=21:无法验证第一个证书 验证返回:1 --- 证书链 0 主题:CN = git.company.com 颁发者:CN = 公司内部CA --- 服务器证书 -----BEGIN CERTIFICATE----- ...(证书内容)... -----END CERTIFICATE----- 主题=CN = git.company.com 颁发者=CN = 公司内部CA --- 未发送客户端证书CA名称 对等签名摘要: SHA256 对等签名类型: RSA-PSS 服务器临时密钥: X25519, 253位 --- SSL握手已读取2100字节,已写入365字节 验证错误: 无法获取本地颁发者证书 --- 新协议,TLSv1.3,密码套件为TLS_AES_256_GCM_SHA384 服务器公钥为2048位 不支持安全重新协商 压缩: 无 扩展: 无 未协商ALPN 未发送早期数据 验证返回码: 20 (无法获取本地颁发者证书) ---
内容的提问来源于stack exchange,提问作者serge
相关产品推荐
相关产品推荐

