我可以通过使用ssh的克隆项目推送,但它不工作时,我克隆项目与https。
它显示的错误信息是:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
我可以通过使用ssh的克隆项目推送,但它不工作时,我克隆项目与https。
它显示的错误信息是:
server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none
当前回答
我刚刚遇到了非常相同的问题,一个git存储库,这总是为我工作。问题是我通过公共WiFi访问它,它会在第一次连接时重定向到专用门户(例如显示广告并同意tos)。
其他回答
GIT_CURL_VERBOSE=1 git [clone|fetch]…
应该能告诉你问题在哪里。在我的例子中,这是因为cURL在基于NSS构建时不支持PEM证书,因为这种支持在NSS中不是主线(#726116 #804215 #402712等等)。
对于Windows上的MINGW64 Git Bash用户
以管理员身份启动Git Bash 在MINGW64终端中运行: echo -n | openssl s_client -showcerts -connect yourserver.com: yourhttpgitlabport 2>/dev/null | sed -ne '/- begin CERTIFICATE-/,/- end CERTIFICATE-/p' >> /c/Program\ Files/Git/mingw64/ssl/certs/ca-bundle.trust.crt 以管理员身份关闭Git Bash 启动Git Bash(不是管理员) 在MINGW64终端中运行: $ git配置——global http。sslBackend schannel $ git配置——global http。sslverify真实
将证书和bundle复制到一个.crt文件中,并确保文件中的证书之间有一个空行。
在互联网上尝试了所有方法之后,我在GitLab服务器上使用了这个方法。
TLDR:
hostname=XXX
port=443
trust_cert_file_location=`curl-config --ca`
sudo bash -c "echo -n | openssl s_client -showcerts -connect $hostname:$port -servername $hostname \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
>> $trust_cert_file_location"
警告:正如gather的精彩回答中所指出的,这将添加所有证书,而不仅仅是根ca。 盲目地将所有(任何)证书添加到您的trustStore中而不进行尽职调查并不是最好的做法。
长回答
基本原因是您的计算机不相信对Gitlab服务器上使用的证书进行签名的证书颁发机构。这并不意味着证书是可疑的,但它可能是自签名的,也可能是由不在您的操作系统ca列表中的机构/公司签名的。要在计算机上规避这个问题,你必须告诉它信任这个证书——如果你没有任何理由怀疑它的话。
您需要检查gitLab服务器使用的web证书,并将其添加到</git_installation_folder>/bin/curl-ca-bundle.crt。
要检查克隆是否至少工作而不检查证书,您可以设置:
export GIT_SSL_NO_VERIFY=1
#or
git config --global http.sslverify false
但这只能用于测试,如“SSL适用于浏览器、wget和curl,但不适用于git”或这篇博文中所述。
检查你的GitLab设置,a在第4272期。
要获得证书(需要添加到curl-ca-bundle中)。CRT文件),输入a:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
(“yourserver.com”是你的GitLab服务器名,yourhttpgitlabport是https端口,通常是443)
要查看CA(证书颁发机构颁发者),输入a:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGilabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' \
| openssl x509 -noout -text | grep "CA Issuers" | head -1
注意:Valeriy Katkov在评论中建议在openssl命令中添加-servername选项,否则在Valeriy的情况下,命令不会显示www.github.com的certificate。
Openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
Findekano在评论中补充道:
来确定curl-ca-bundle的位置。Crt,你可以使用这个命令
curl-config --ca
此外,请参阅我最近的回答“github:服务器证书验证失败”:你可能必须重新安装这些证书:
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
检查你的系统时钟,
美元的日期
如果不正确,证书检查将失败。要纠正系统时钟,
安装NTP
时钟应该自动同步。
最后再次输入clone命令。