一、问题现象

# 切换SSL底层为OpenSSL
git config --global http.sslBackend openssl
# 关闭证书校验(内网专用)
git config --global http.sslVerify false

配置存储在用户目录.gitconfig全局配置文件,后续所有 Git 仓库复用配置。

第一句:git config --global http.sslBackend openssl

原来默认:Windows Git 用 Schannel(Windows 系统自带安全组件)

Schannel = 绑定电脑系统证书库,校验 SSL 时规则:

  1. 去你 Windows 系统自带的可信根证书列表查 GitLab 证书;
  2. 你们公司内网 GitLab 是内网自签证书,没装到电脑系统信任列表
  3. Schannel 判定证书非法 → 直接断开 TCP 握手 → 报错 schannel: failed to receive handshake,连不上服务器。

改成 openssl:换一套独立证书引擎

OpenSSL 是 Git 自带独立库,不读取 Windows 系统证书,自己一套证书逻辑,不受本机系统证书限制。

作用:解决「握手连不上服务器」的报错。

第二句:git config --global http.sslVerify false

就算换成 OpenSSL,OpenSSL 自己也有可信证书库:

  • 内网 Git 自签证书不在 OpenSSL 信任名单里;
  • 默认sslVerify=true强制校验证书合法,证书不对就拒绝拉代码

sslVerify=false = 取消证书真假检查 只要能连上服务、链路加密就行,不管证书是谁发的、合不合法。

作用:解决「证书校验失败拒绝克隆」。

组合逻辑串联

  1. 换 openssl → 不再依赖 Windows 系统证书,能成功和 GitLab 建立 SSL 连接(握手成功)
  2. 关掉证书校验 → 不校验内网烂证书,放行数据传输 两步做完 → git clone 正常下载代码。

举个生活化例子

  • Schannel:去政府正规公证处核验证件,内网 GitLab 是公司自制证件,公证处不认,直接拒接见面(连不上)。
  • openssl:换成私人核验员(OpenSSL),不用去公证处,能见面(握手成功)。
  • sslVerify=false:告诉核验员不用查证件真假,直接办事(拉代码)。

关键提醒

只适合公司内网环境;连 Github/Gitee 外网必须打开sslVerify=true,防止中间人劫持窃取代码和账号。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐