服务器证书validation失败。 CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无

我可以通过使用ssh克隆项目推送,但是当我用https克隆项目时,它不起作用。 它显示如下消息错误。

server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none 

TLDR:

 hostname=XXX port=443 trust_cert_file_location=`curl-config --ca` sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port \ 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \ >> $trust_cert_file_location" 

长答案

基本原因是您的计算机不信任签署Gitlab服务器上使用的证书的证书颁发机构 。 这并不意味着证书是可疑的,但它可以是自签名的或由不在您的操作系统的CA列表中的机构/公司签名。 为了避免计算机上的问题,你需要做的是告诉它信任该证书 – 如果你没有任何理由怀疑它。

您需要检查用于您的gitLab服务器的Web证书,并将其添加到</git_installation_folder>/bin/curl-ca-bundle.crt

要检查至less克隆是否工作, 而不检查所述证书,可以设置:

 export GIT_SSL_NO_VERIFY=1 #or git config --global http.sslverify false 

但是,这将仅用于testing,如“ SSL与浏览器,wget和curl一起工作,但失败与git ”或本博客文章中所示 。

检查您的GitLab设置, 发行4272 。


要获得该证书(您需要添加到curl-ca-bundle.crt文件中),请键入a:

 echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \ 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' 

(“ yourserver.com ”是您的GitLab服务器名称)

要检查CA(证书颁发机构颁发者),请键入a:

 echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \ 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \ | openssl x509 -noout -text | grep "CA Issuers" | head -1 

Findekano补充说 :

为了确定curl-ca-bundle.crt的位置,你可以使用这个命令

 curl-config --ca 

此外,请参阅我最近的回答“ github:服务器证书validation失败 ”:您可能必须renistall所有这些证书:

 sudo apt-get install --reinstall ca-certificates sudo mkdir /usr/local/share/ca-certificates/cacert.org sudo wget -P /usr/local/share/ca-certificates/cacert.org http://www.cacert.org/certs/root.crt http://www.cacert.org/certs/class3.crt sudo update-ca-certificates git config --global http.sslCAinfo /etc/ssl/certs/ca-certificates.crt 

注意:这有重大的安全隐患。

打开您的terminal并运行以下命令:

 export GIT_SSL_NO_VERIFY=1 

它适用于我,我正在使用Linux系统。

此问题的另一个原因可能是您的时钟可能closures。 证书是时间敏感的。

要检查当前的系统时间:

 date -R 

您可能会考虑安装NTP以自动将系统时间与全局NTP池中的可信互联网时间服务器同步。 例如,要在Debian / Ubuntu上安装:

 apt-get install ntp 

有同样的问题。 由自己颁发的证书颁发机构引起。 通过将.pem文件添加到/ usr / local / share / ca-certificates /并调用来解决此问题

 sudo update-ca-certificates 

PS:在文件夹./share/ca-certificates中的pem文件必须具有扩展名.crt

检查你的系统时钟,

$ date

如果不正确,证书检查将失败。 要纠正系统时钟,

$ apt-get install ntp

时钟应该同步。

最后再次inputclone命令。

 GIT_CURL_VERBOSE=1 git [clone|fetch]… 

应该告诉你问题在哪里。 在我的情况下,由于这个支援不是NSS的主线( #726116 #804215 #402712 以及 更多 ),所以cURL不支持PEM证书。

当我build立goagent代理时,我搞砸了我的CA文件。 无法从github中获取数据,并得到相同的警告:

服务器证书validation失败。 CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无

使用Vonc的方法,从github获取证书,并把它放到/etc/ssl/certs/ca-certificates.crt中,解决问题。

echo -n | openssl s_client -showcerts -connect github.com:443 2> / dev / null | sed -ne'/ -BEGIN CERTIFICATE – /,/ – END CERTIFICATE- / p'

不需要将git sslvalidation设置为false。 这是系统没有所有CA权限证书时引起的。 大多数拥有正版SSL证书的人员缺less中间证书。

只需将中间证书(缺失CA和中间证书的整个链)的完整文本添加到

 sudo gedit /etc/ssl/certs/ca-certificates.crt 

在不运行update-ca-certificates

手动生成的证书也一样,只需添加CA证书文本即可。

最后:推送成功:一切都是最新的

或者直接运行这个注释来将服务器证书添加到你的数据库中:

 echo $(echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p') >> /etc/ssl/certs/ca-certificates.crt 

然后再做git克隆。

如果您在专用networking中使用git服务器,并使用自签名证书或IP地址上的证书, 你也可以简单地使用git global config来禁用ssl检查:

 git config --global http.sslverify "false" 

我在Raspberry pi 2上安装了Xubuntu,发现与时间相同的问题,因为NTP和自动服务器同步已closures(或未安装)。 获取NTP

 sudo apt-get install ntp 

并将“时间和date”从“手动”更改为“与Internet服务器保持同步”

最后,将http.sslverify添加到.git / config。

 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = https://server/user/project.git fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master [http] sslVerify = false 

我刚刚遇到了一个总是为我工作的git仓库的问题。 问题是我通过公共WiFi访问它,在首次连接时redirect到强制门户(例如显示广告并同意tos)。