Ubuntu 10.04 / CURL:我如何修复/更新CA Bundle?

我最近把我们的服务器从8.04升级到了10.04,以及所有的软件。

从我在网上find的,似乎新版本的CURL不包含一个CA包,因此,无法validation您连接到的服务器的证书是由一个有效的权威。

实际的错误是:

 CURL错误:SSL证书问题,请validationCA证书是否正确。
详细信息:错误:14090086:SSL例程:SSL3_GET_SERVER_CERTIFICATE:
证书validation失败 

我发现有些手段build议手动指定一个CA文件,或者在调用CURL时通过设置一个选项来完全禁用检查,但我更愿意全局修复这个问题,而不必修改每个应用程序的CURL调用。

有没有办法在服务器范围内解决CURL的CA问题,以便所有现有的应用程序代码都可以正常工作而不需要修改?

我一直有同样的麻烦,并发现一点点后,发现你可以直接从卷发器网站下载一个CA-certs包准备在ubuntu上curl。

cd /etc/ssl/certs sudo wget http://curl.haxx.se/ca/cacert.pem 

现在curl使用最新的包,你很好去。

有一个类似的问题,从命令行运行curl Ubuntu 12.04获取在github中的aws命令行工具。 我发现如果我运行这样的命令行:

 curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt 

它会工作。 但试图设置CURL_CA_BUNDLE环境variables,所以我可以避免“cacert”参数将无法正常工作。 最终更新CA证书似乎解决了这个问题:

 sudo update-ca-certificates 

作为一个便笺,有一次我更新了curl.haxx.se的ca-certs,这个问题没有解决问题,但可能是相关的。 (从/etc/ssl/certs运行sudo wget http://curl.haxx.se/ca/cacert.pem )。

通常情况下,不具有唯一实现并且针对OpenSSL编译的软件将引用通常位于/usr/share/ssl/certs的全系统ca-bundle.crt。

Ubuntu的位置可能不同,但OpenSSL包应该包含ca-bundle文件。

CURL有多种选项来指定它如何validation证书。

  • 用于ca-bundle文件位置的CURL_CA_BUNDLE环境variables。
  • --capath允许您指定CA证书所在的目录。 (重写CURL_CA_BUNDLE
  • --cacert允许您指定CA证书文件。

在我的CentOS服务器上,我可以运行以下命令来识别CURL使用的ca-bundlepath:

 $ curl-config --ca /usr/share/ssl/certs/ca-bundle.crt