我可以通过使用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
当前回答
这可能听起来微不足道;然而,修正我的约会日期,问题就解决了。检查你的日期和时间是否正确。
其他回答
不幸的是,投票最多的答案是错误的。这样做会达到预期的效果,但原因却是错误的。
VonC回答中的命令将链中的所有证书添加到信任锚存储区。然而,这些证书不是信任锚(或者换句话说,根CA证书);它们是最终实体和中间CA证书。
TLS RFC 5246标准规定:
certificate_list 这是一个证书序列(链)。发送方的 证书必须排在列表的第一位。每一个之后 证书必须直接证明它之前的证书。因为 证书验证要求分发根密钥 独立地,指定根的自签名证书 证书颁发机构可以从链中省略 假设远端必须已经拥有它才能 在任何情况下都要验证它。
因此,VonC(和其他)命令很可能会添加所有错误的证书,而不是根CA。
终端实体或中间CA证书不是信任锚。这些证书可能会随着时间的推移而改变,在这种情况下,同样的问题将再次浮出水面。另外,如果最终实体证书由于某种原因被撤销,会发生什么?您的计算机很可能继续信任已撤销的证书-在实践中,确切的响应可能取决于所使用的加密库,因为标准中没有很好地定义,因此在实现中会有所变化。
The correct way to fix this would involve looking at the last certificate in the chain, confirming it is not a Root CA (as that may be sent by the server - see the RFC extract quoted above) and if that is the case, looking at the Issuer and potentially the AKI field to ascertain which Root CA issued this first intermediate CA certificate. Once the details have been worked out, you'll need to visit the repository of that Root CA and download (and verify the hash) of that certificate before downloading it. You should review the CP/CPS of this Root CA before deciding to install it in your trust-anchor store.
如果最后一个证书是根CA,则使用openssl x509…命令查看详细信息,然后在决定是否应该在信任锚存储区中安装该证书之前进行尽职调查。
不可能也不应该有执行上述操作的自动过程,因为在决定将信任锚添加到信任锚存储区之前,需要验证信任锚的来源。在盲目地安装它之前,问问自己为什么它不是ca-certificate包(或你的发行版的等效包)的一部分。
但是,运行如下命令将显示链中最后一个证书的主题和颁发者,这可能有助于您追踪丢失的根CA证书:
echo -n | openssl s_client -showcerts -servername www.github.com -connect www.github.com:443 2>/dev/null | tac | awk '/-END CERTIFICATE-/{f=1} f;/-BEGIN CERTIFICATE-/{exit}' | tac | openssl x509 -noout -subject -issuer
这(对我来说是2021年5月底)导致:
subject=C = US, O = "DigiCert, Inc.", CN = DigiCert High Assurance TLS Hybrid ECC SHA256 2020 CA1
issuer=C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert High Assurance EV Root CA
从上面可以看出,服务器发送的是中间CA证书,而不是根证书(主题和颁发者不同)。该中间CA证书是由DigiCert的高保证EV根CA签署的。我们现在可以访问DigiCert的存储库并下载该特定证书。
在安装该证书之前,通过运行openssl x509 -noout -text -in < downloads .crt,确保它是签署了中间CA的证书。pem>,并将X509v3授权密钥标识符扩展的值与服务器发送的证书中的相同扩展进行比较。注意:您可以通过将上一条命令末尾的-subject -issuer更改为-text来查看服务器发送的中间CA证书上的扩展名。
一旦你确定你下载的根CA证书是正确的,并且你已经进行了尽职调查并决定信任这个根CA,将它添加到你的信任锚存储区:
sudo mv <downloaded.crt.pem> /usr/local/share/ca-certificates/<downloaded.crt>
sudo update-ca-certificates
注意,该文件必须是PEM格式,文件名必须以.crt结尾,否则update-ca-certificates将无法识别它。
最后更新: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证书不受信任。
在做其他事情之前,检查是否有一个正在运行的代理,比如可以暂时关闭的Zscaler。然后检查你的日期,如上所述。
我在树莓派2上安装了Xubuntu,发现时间上也有同样的问题,NTP和自动服务器同步是关闭的(或者没有安装)。得到国家结核控制规划
sudo apt-get install ntp
将“时间及日期”由“手动”改为“与互联网服务器保持同步”
我做了什么来解决这个问题在终端(Ubuntu 18.04):
openssl s_client -showcerts -servername www.github.com -connect www.github.com:443
我得到了两个证书块。我将证书块复制到我的证书文件/etc/ssl/certs/ca-certificates.crt。