我使用的是 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/
希望这可以帮助!