gpt4 book ai didi

linux - 来自 gitlab 的 Git 克隆在 Linux 上失败,而在 Windows git bash 中工作

转载 作者:行者123 更新时间:2023-12-04 18:35:26 25 4
gpt4 key购买 nike

我是 Linux 新手,刚刚安装了 Lubuntu 并遇到了问题 -当我试图从我公司的 git 克隆我的远程工作仓库时:

$ sudo git clone https://path/to/repo.git

我一直收到错误:

Cloning into 'repo'...
fatal: unable to access 'https://path/to/repo.git/': server certificate verification failed. CAfile: none CRLfile: none

我知道它提到了证书,但我没有。之前,我在 Windows 上工作,并且能够在没有任何证书的情况下简单地 git clone 这个 repo。

最佳答案

这个错误意味着git客户端无法验证证书链或根的完整性。解决此问题的正确方法是确保来自远程存储库的证书有效,然后将其添加到客户端系统。

更新公共(public)CA列表

我建议的第一件事是简单地更新系统已知的根 CA 列表,如下所示。

# update CA certificates
sudo apt-get install apt-transport-https ca-certificates -y
sudo update-ca-certificates

如果您正在处理一个长时间未更新的系统,这可能会有所帮助,但当然不会解决私有(private)证书的问题。

获取证书,直接连接

如果您将来自远程 git 服务器的证书添加到本地检查的证书列表中,则 git 客户端的错误将得到解决。这可以通过使用 openssl 从远程主机提取证书来完成:

openssl s_client -showcerts -servername git.mycompany.com -connect git.mycompany.com:443 </dev/null 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p'  > git-mycompany-com.pem

这将获取“https://git.mycompany.com”使用的证书,并将内容复制到名为“git-mycompany-com.pem”的本地文件中。

获取证书、网络代理

如果此主机只能通过 web 代理(如 Squid)访问 git 服务器,则如果您使用的是 OpenSSL 1.1.0 及更高版本,则 openssl 将只能利用 squid 代理。但是,如果您使用的是旧版本的 OpenSSL,那么您将需要通过使用 socat 之类的东西在本地绑定(bind)到端口 4443 并通过 squid 代理流量到最终目的地来解决此限制。

# install socat
sudo apt-get install socat -y

# listen locally on 4443, send traffic through squid "squidhost"
socat TCP4-LISTEN:4443,reuseaddr,fork PROXY:squidhost:git.mycompany.com:443,proxyport=3128

然后在另一个控制台中,告诉 OpenSSL 从本地主机的 4443 端口提取证书。

openssl s_client -showcerts -servername git.mycompany.com -connect 127.0.0.1:4443 </dev/null 2>/dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > git-mycompany-com.pem

将证书添加到本地证书列表

无论是通过代理还是直接连接,您现在在名为“git-mycompany-com.pem”的文件中都有一个远程证书列表。此文件将包含证书、它的中间链和根 CA 证书。下一步是让 git 客户端在连接到 git 服务器时考虑到这一点。这可以通过将证书添加到原始错误中提到的文件来完成,在这种情况下,更改是针对所有用户全局进行的,或者可以将它添加到该单个用户的 git 配置中。

** 全局添加**

cat git-mycompany-com.pem | sudo tee -a /etc/ssl/certs/ca-certificates.crt

** 为单个用户添加 **

git config --global http."https://git.mycompany.com/".sslCAInfo ~/git-mycompany-com.pem

它会默默地将以下行添加到 ~/.gitconfig

[http "https://git.mycompany.com/"]
sslCAInfo = /home/user/git-mycompany-com.pem

避免变通

避免使用跳过 SSL 证书验证的解决方法。只使用它们来快速测试证书是否是根本问题,然后使用上面的部分来解决问题。

git config --global http.sslverify false

export GIT_SSL_NO_VERIFY=true

关于linux - 来自 gitlab 的 Git 克隆在 Linux 上失败,而在 Windows git bash 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67647067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com