如何在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 / ss / cert / 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,并使用$ sudo update-ca-certificates --fresh更新我的CA证书,这更新了证书,但仍然没有使错误60消失。

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

有谁知道如何解决这一问题? 有没有办法真正重新开始我的所有证书? 或者有人甚至知道我如何确定这个自签名证书的位置,然后如何删除它?

PS:我不想使用-k(又名–insecure)标志。 我希望安全地工作。

经过过去几天的研究和研究,我得到了它的工作,答案最终变得相当简单。

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

这使得curl在命令行上运行。 为了进一步让cacert=/etc/ssl/certs/ca-certificates.crt在R中工作(我第一次遇到问题)我还需要在我的.curlrc文件中使用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 

进入相同的certs目录。 cafile指向这个也很有效。 最后我把它放回到ca-certificates.crt ,它仍然有效。

我不明白为什么这样做或者发生了什么,但它已经解决了。

cafile key对我不起作用(curl 7.45.0)但是cacert(来自–cacert选项)确实如此。 我的.curlrc文件:

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

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

这是通过将ca-certificates.crt下载到/etc/ssl/certs/ca-certificates.crt并在/ etc / pki / tls / certs /目录下创建符号链接ca-bundle.crt来解决的。

希望这可以帮助!