我可以使用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
Answers:
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"
长答案
根本原因是您的计算机不信任对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设置(问题4272)。
要获取该证书(您需要将其添加到curl-ca-bundle.crt
文件中),请键入:
echo -n | openssl s_client -showcerts -connect yourserver.com:YourHttpsGitlabPort \
2>/dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p'
(其中' yourserver.com
是您的GitLab服务器名称YourHttpsGitlabPort
,通常是https端口443
)
要检查CA(证书颁发机构颁发者),请键入:
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建议在注释中为-servername
openssl命令添加选项,否则在Valeriy的情况下,该命令不会显示www.github.com的证书。
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
要确定的位置
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
which git
。
curl-config --ca
,但是什么也没退。
注意:这对安全性有重大影响。
打开您的终端并运行以下命令:
export GIT_SSL_NO_VERIFY=1
它对我有用,我正在使用Linux系统。
git config --global http.sslverify false
造成此问题的另一个原因可能是您的时钟关闭了。证书是时间敏感的。
要检查当前系统时间:
date -R
您可能会考虑安装NTP,以自动将系统时间与全局NTP池中的受信任的Internet时间服务器同步。例如,要在Debian / Ubuntu上安装:
apt-get install ntp
git
说,这是底层的SSL交换。Git内置SSL支持。
有同样的问题。由自我颁发的证书颁发机构引起。通过将.pem文件添加到/ usr / local / share / ca-certificates / 并解决
sudo update-ca-certificates
PS:文件夹./share/ca-certificates中的pem文件必须具有扩展名.crt
或者只是运行以下注释以将服务器证书添加到您的数据库中:
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提取数据,并得到相同的警告:
服务器证书验证失败。CAfile:/etc/ssl/certs/ca-certificates.crt CRLfile:无
使用Vonc的方法,从github获取证书,然后将其放入/etc/ssl/certs/ca-certificates.crt,问题已解决。
回声-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和中间证书的整个链)添加到
sudo gedit /etc/ssl/certs/ca-certificates.crt
无需运行update-ca-certificates
。
手动生成的证书也是如此,只需添加CA证书文本。
最后:成功推送:一切都是最新的
我在终端中解决此问题的方法(Ubuntu 18.04):
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
我得到了两个证书块。然后,我将证书块复制到了我的证书文件中/etc/ssl/certs/ca-certificates.crt
。
---BEGIN CERTIFICATE---
和之间的方块--- END CERTIFICATE ---
?
最终,将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 config http.sslVerify false
。您是否建议在每个存储库的基础上编辑Git配置,而不是@ romain-vdk建议的全局编辑?
你应该检查的第一件事是的文件权限/etc/ssl
和/etc/ssl/certs
。
rm -rf /etc/ssl/*
在使用ssl-cert
我的证书颁发机构管理工具时,使用组名/ ID时我犯了放弃文件权限(或删除SSL 目录)的错误。
那时我注意到了wget
和curl
CLI浏览器工具完全相同的错误消息:
server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none
一旦将/etc/ssl
and /etc/ssl/cert
目录的文件权限设置为o+rx-w
,这些CLI浏览器工具就会开始变得轻松一些:
mkdir -p /etc/ssl/certs
chmod u+rwx,go+rx /etc/ssl /etc/ssl/certs
我还必须重新创建Java子目录并重建Trusted CA证书目录:
mkdir /etc/ssl/certs/java
chmod u+rwx,go+rx /etc/ssl/certs/java
update-ca-certificates
海岸是晴朗的。
curl-config --ca
返回的情况下/etc/ssl/certs/ca-certificates.crt
,这是我必须添加证书的地方。除此之外,这个答案是第一个向我指出这个问题正确方向的信息