如何在 Ubuntu 14.04 中使用 Curl 修复 CA 证书问题?

the*_*ods 16 ssl certificates curl

我正在使用 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)标志。我想让它安全地工作。

the*_*ods 12

在过去几天对此进行研究和研究后,我让它开始工作,答案最终变得相当简单。

我需要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 http://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)

进入同一个certs目录。有cafile针对性的在此工作过。最后我把它放回去ca-certificates.crt,它仍然有效。

我不明白为什么这有效或发生了什么,但它已解决。


小智 10

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

capath=/etc/ssl/certs/
cacert=/etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)