问题描述
我最近将服务器以及所有软件从8.04升级到了10.04。
根据我在网上找到的信息,似乎新版本的CURL不包含CA捆绑包,因此无法验证您所连接的服务器的证书是否由有效的授权机构签名。
实际错误是:
CURL error: SSL certificate problem, verify that the CA cert is OK.
Details: error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:
certificate verify failed
我发现的一些地方建议您在调用CURL时通过设置选项来手动指定CA文件或完全禁用该检查,但是我宁愿全局解决此问题,而不必修改每个应用程序的CURL调用。
有没有办法解决CURL的CA问题server-wide,以便所有现有的应用程序代码都可以按原样工作而无需进行修改?
最佳回答
我遇到了同样的麻烦,经过一番摸索后发现,您可以直接从curl开发者网站下载CA-certs软件包,以准备在ubuntu上使用curl。
cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem
现在,curl使用了最多的up-to-date捆绑包,您一切顺利。
次佳回答
Ubuntu 12.04从命令行运行curl以获得github中的aws 命令行工具时也遇到类似的问题。我发现是否按如下方式运行命令行:
curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt
它会工作。但是尝试设置CURL_CA_BUNDLE环境变量,以便可以避免”cacert”参数不起作用。最终更新ca-certificates似乎可以解决问题:
sudo update-ca-certificates
附带说明一下,有一点我从curl.haxx.se更新了ca-certs,该问题无法解决,但可能已经解决了。 (sudo wget http://curl.haxx.se/ca/cacert.pem
从/etc/ssl/certs
运行)。
第三种回答
通常,没有唯一实现且针对OpenSSL编译的软件将引用通常位于/usr/share/ssl/certs
中的system-wide ca-bundle.crt。
在Ubuntu中,位置可能有所不同,但OpenSSL软件包应包含ca-bundle文件。
CURL具有多种选项来指定其验证证书的方式。
-
ca-bundle文件位置的
CURL_CA_BUNDLE
环境变量。 -
--capath
允许您指定CA证书所在的目录。 (覆盖CURL_CA_BUNDLE
) -
--cacert
允许您指定CA证书文件。
在我的CentOS服务器上,我可以运行以下命令来识别CURL使用的ca-bundle路径:
$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt