我可以通过使用ssh的克隆项目推送,但它不工作时,我克隆项目与https。

它显示的错误信息是:

server certificate verification failed. CAfile: /etc/ssl/certs/cacertificates.crt CRLfile: none

当前回答

最后更新:2021年9月30日|参见所有文档

一个平台是否能够验证Let’s Encrypt证书的主要决定因素是该平台是否信任ISRG的“ISRG Root X1”证书。在2021年9月之前,一些平台可以验证我们的证书,即使他们不包括ISRG根X1,因为他们信任IdenTrust的“DST根CA X3”证书。从2021年10月起,只有那些信任ISRG Root X1的平台才会验证Let’s Encrypt证书(Android除外)。

当前系统

如果你的系统是最新的,但由于某种原因自动更新不起作用,应该有足够的:

apt update
apt upgrade
sudo dpkg-reconfigure ca-certificates

在reconfigure阶段,取消选择“DST根CA X3”证书

过时的系统

要解决,在旧的Linux服务器上,如Ubuntu 16或Debian 8 jessie,需要几个步骤:

upgrade openssl to anything >=1.0.2 On Debian jessie enable backports source, add this line to sources.list: deb http://archive.debian.org/debian jessie-backports main contrib non-free and do apt-get install -t jessie-backports openssl ensure security updates for ca-certificates package apt upgrade download latest LetsEncrypt root CA certs: sudo curl -k https://letsencrypt.org/certs/isrgrootx1.pem.txt -o /usr/local/share/ca-certificates/isrgrootx1.crt sudo curl -k https://letsencrypt.org/certs/letsencryptauthorityx1.pem.txt -o /usr/local/share/ca-certificates/letsencryptauthorityx1.crt sudo curl -k https://letsencrypt.org/certs/letsencryptauthorityx2.pem.txt -o /usr/local/share/ca-certificates/letsencryptauthorityx2.crt sudo curl -k https://letsencrypt.org/certs/lets-encrypt-x1-cross-signed.pem.txt -o /usr/local/share/ca-certificates/letsencryptx1.crt sudo curl -k https://letsencrypt.org/certs/lets-encrypt-x2-cross-signed.pem.txt -o /usr/local/share/ca-certificates/letsencryptx2.crt sudo curl -k https://letsencrypt.org/certs/lets-encrypt-x3-cross-signed.pem.txt -o /usr/local/share/ca-certificates/letsencryptx3.crt sudo curl -k https://letsencrypt.org/certs/lets-encrypt-x4-cross-signed.pem.txt -o /usr/local/share/ca-certificates/letsencryptx4.crt sudo dpkg-reconfigure ca-certificates during reconfigure stage, please deselect "DST Root CA X3" certificate

在这些步骤之后,apt update应该适用于基于LetsEncrypt的源代码,wget和curl应该不会抱怨。

特别注意curl -k允许连接“不安全”的SSL服务器,因为LetsEncrypt证书不受信任。

其他回答

今天我在freedesktop.org上使用Git for Windows时遇到了这个问题。我把git版本从2.28更新到2.35,问题就解决了。可能是windows版本的集成shell环境没有更新的证书。

希望这对使用Windows版本的用户有所帮助。

导致这个问题的另一个原因可能是你的生物钟可能走错了。证书是时间敏感的。

查询当前系统时间。

date -R

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

apt-get install ntp
GIT_CURL_VERBOSE=1 git [clone|fetch]…

应该能告诉你问题在哪里。在我的例子中,这是因为cURL在基于NSS构建时不支持PEM证书,因为这种支持在NSS中不是主线(#726116 #804215 #402712等等)。

在做其他事情之前,检查是否有一个正在运行的代理,比如可以暂时关闭的Zscaler。然后检查你的日期,如上所述。

最后,添加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