我最近将我们的服务器从 8.04 升级到了 10.04,同时升级了所有软件。
从我在网上找到的信息来看,新版本的 CURL 似乎不包含 CA 包,因此无法验证您所连接的服务器的证书是否由有效机构签名。
实际错误是:
CURL 错误:SSL 证书问题,请验证 CA 证书是否正确。 详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE: 证书验证失败
我发现有些地方建议手动指定 CA 文件或通过在调用 CURL 时设置选项来完全禁用检查,但我更愿意全局修复该问题,而不是修改每个应用程序的 CURL 调用。
有没有办法在整个服务器范围内修复 CURL 的 CA 问题,以便所有现有的应用程序代码都能按原样工作而无需修改?
答案1
我一直遇到同样的麻烦,经过一番寻找后发现,可以直接从 curl dev 站点下载适用于 ubuntu 上的 curl 的 CA 证书包。
cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem
现在 curl 使用最新的捆绑包,您就可以开始了。
答案2
有类似的问题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
)。
答案3
通常,没有唯一实现且针对 OpenSSL 编译的软件将引用通常位于 中的系统范围的 ca-bundle.crt /usr/share/ssl/certs
。
在 Ubuntu 中位置可能不同,但 OpenSSL 包应该包含 ca-bundle 文件。
CURL 有多种选项来指定如何验证证书。
CURL_CA_BUNDLE
ca-bundle 文件位置的环境变量。--capath
允许您指定 CA 证书所在的目录。(覆盖CURL_CA_BUNDLE
)--cacert
允许您指定 CA 证书文件。
在我的 CentOS 服务器上,我可以运行以下命令来识别 CURL 使用的 ca-bundle 路径:
$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt
答案4
对于 ubuntu 10.04 lucid
放http://curl.haxx.se/ca/cacert.pem在 /usr/share/ca-certificates/ 添加一行
cacert.pem
进入 /etc/ca-certificates.conf
sudo 更新 ca 证书
下载最新的 openssl 和 curl (使用 --with-openssl 配置) make 并安装
它解决了我的问题