server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
我可以使用ssh推送克隆项目,但是当我使用https克隆项目时,它不起作用。
显示我的错误消息是:
1 server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
TLDR:
1 2 3 4 5 6 7 | 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证书,并将其添加到
要检查至少克隆是否可以正常工作而不检查所述证书,可以设置:
1 2 3 | export GIT_SSL_NO_VERIFY=1 #or git config --global http.sslverify false |
但这仅用于测试,如" SSL可与浏览器,wget和curl配合使用,但与git配合使用"或本博客文章中所示。
检查您的GitLab设置(问题4272)。
要获取该证书(您需要将其添加到
1 2 | echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpGilabPort \ 2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' |
(以"
要检查CA(证书颁发机构颁发者),请键入:
1 2 3 | 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 |
注意:Valeriy Katkov建议在注释中为openssl命令添加
1 openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Findekano添加了评论:
to identify the location of
curl-ca-bundle.crt , you could use the command
1 | curl-config --ca |
另外,请参阅我最近的答案" github:服务器证书验证失败":您可能必须放弃所有这些证书:
1 2 3 4 5 | 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 |
Note: This has major security implications.
打开终端并运行以下命令:
1 | export GIT_SSL_NO_VERIFY=1 |
它对我有用,我正在使用Linux系统。
造成此问题的另一个原因可能是您的时钟关闭了。证书是时间敏感的。
要检查当前系统时间:
1 | date -R |
您可能会考虑安装NTP,以自动将系统时间与全局NTP池中的受信任Internet时间服务器同步。例如,要在Debian / Ubuntu上安装:
1 | apt-get install ntp |
如果您在专用网络中使用git服务器,并且正在使用自签名证书或通过IP地址的证书;您也可以只使用git global config禁用ssl检查:
1 | git config --global http.sslverify"false" |
有同样的问题。由自我颁发的证书颁发机构引起。
通过将.pem文件添加到/ usr / local / share / ca-certificates /解决了该问题
并打电话
1 | sudo update-ca-certificates |
PS:文件夹./share/ca-certificates中的pem文件必须具有扩展名.crt
检查您的系统时钟,
如果不正确,证书检查将失败。要更正系统时钟,
时钟应自行同步。
最后,再次输入clone命令。
1 | GIT_CURL_VERBOSE=1 git [clone|fetch]… |
应该告诉您问题出在哪里。在我的情况下,这是由于cURL针对NSS构建时不支持PEM证书,因为该支持不是NSS中的主线(#726116#804215#402712等)。
或者只是运行以下注释以将服务器证书添加到您的数据库中:
1 | 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 clone。
设置goagent代理时,我弄乱了我的CA文件。无法从github提取数据,并得到相同的警告:
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
使用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 ssl验证设置为false。原因是系统没有所有的CA授权证书。通常,拥有真正SSL证书的人都缺少中间证书。
只需将中间证书的完整文本(缺少CA和中间证书的整个链)添加到
1 | sudo gedit /etc/ssl/certs/ca-certificates.crt |
无需运行
手动生成的证书也是如此,只需添加CA证书文本。
最后:成功推送:一切都是最新的
我在Raspberry pi 2上安装了Xubuntu,发现时间上存在相同的问题,因为NTP和自动服务器同步已关闭(或未安装)。获取NTP
1 | sudo apt-get install ntp |
并将"时间和日期"从"手动"更改为"与Internet服务器保持同步"
我在终端中解决此问题的措施(Ubuntu 18.04):
1 | openssl s_client -showcerts -servername www.github.com -connect www.github.com:443 |
我有两个证书块。然后,我将证书块复制到我的证书文件到
最终,将http.sslverify添加到您的.git / config中。
1 2 3 4 5 6 7 8 9 10 11 12 13 | [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 |
将证书和捆绑软件复制到一个.crt文件中,并确保文件中的证书之间没有空白行。
在尝试了Internet上的所有内容之后,这对我在GitLab服务器上起作用。
我刚刚在git存储库中遇到了同样的问题,它总是对我有用。问题是我通过公共WiFi访问访问了它,并在首次连接时重定向到了强制门户(例如,显示广告并同意tos)。