如何修复 Ubuntu 14.04 中 Curl 的 CA 证书问题?

如何修复 Ubuntu 14.04 中 Curl 的 CA 证书问题?

我使用的是 Ubuntu 14.04。当我使用 curl 时,出现以下错误:

curl: (77) error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath:

从我从谷歌搜索获得的信息来看,它正在寻找的 CAfile 位置对于 Ubuntu 来说并不正确(并且它在我的计算机上不存在),/etc/ssl/certs/ca-certificates.crt是正确的位置。

大多数解决方案都涉及将环境变量设置CURL_CA_BUNDLE为正确的位置,或添加cacert=/etc/ssl/certs/ca-certificates.crt到我的主目录中的(新创建的).curlrc文件。我试过了这两种方法,但都没有完全解决问题。curl 找到了这个位置,但仍然不起作用,并给出错误:

curl: (60) SSL certificate problem: self signed certificate in certificate chain

我还尝试在 Ubuntu 中卸载并重新安装 curl,并更新我的 CA 证书$ sudo update-ca-certificates --fresh,但仍然无法消除错误 60。

我对 CA 证书不太了解,怀疑我过去是否故意添加了一些自签名证书。也许是偶然的,我不知道。

有人知道如何解决这个问题吗?有没有办法真正重新开始使用我的所有证书?或者有人知道我如何找出这个自签名证书在哪里,然后如何删除它?

PS:我不想使用 -k(又名 --insecure)标志。我想让它安全地运行。

答案1

经过过去几天的研究和研究,我终于找到了答案,并得到了相当简单的答案。

我需要在我的文件capath=/etc/ssl/certs/中进行设置。.curlrc

这让 curl 在命令行上工作了。为了进一步让 curl 在 R 中工作(我第一次遇到问题的地方),我还需要cacert=/etc/ssl/certs/ca-certificates.crt在我的.curlrc文件中添加之前尝试的内容,否则它将继续寻找/etc/pki/tls/certs/ca-bundle.crt

我仍然不知道为什么会看到有关自签名证书的错误。

根据其他一些随机发现,我还从 Curl 网站下载了一个证书,其中包含:

sudo wget https://curl.se/ca/cacert.pem

放到同一个certs目录中。cafile指向这个也有效。最后我把它放回去ca-certificates.crt,它仍然有效。

我不明白为什么这会起作用或者发生了什么,但它已经解决了。

答案2

卡菲勒密钥对我不起作用(curl 7.45.0),但 cacert(来自 --cacert 选项)可以。我的.curlrc文件:

capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt

答案3

经过几次研究后,我终于找到了答案,而且答案其实相当简单。

打开终端ctrl++并更改alt工作t目录:

 cd /etc/ssl/certs/

下载 pem 文件证书文件夹

 sudo wget https://curl.se/ca/cacert.pem 

现在打开文件.curlrc

nano ~/.curlrc 

在打开的文件中添加以下行

capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt

现在保存文件并使用 curl 命令执行您的操作。

注意:这里我使用了 nano 编辑器,但您可以使用任何编辑器。

答案4

我们在 Ubuntu 14.04.5 中的一个 C++ 程序中遇到了同样的问题。该.curlrc方法没有生效。

ca-certificates.crt通过下载到目录并在目录下/etc/ssl/certs/ca-certificates.crt创建符号链接解决了这个问题。ca-bundle.crt/etc/pki/tls/certs/

希望这可以帮助!

相关内容