我最近将我们的服务器从 8.04 升级到 10.04,以及所有的软件。
从我在网上找到的内容来看,新版本的 CURL 似乎不包含 CA 包,因此无法验证您正在连接的服务器的证书是否由有效机构签名.
实际错误是:
CURL 错误:SSL 证书问题,验证 CA 证书是否正常。 详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE: 证书验证失败
我发现的一些地方建议手动指定 CA 文件或通过在调用 CURL 时设置一个选项来完全禁用检查,但我更愿意全局修复该问题,而不必修改每个应用程序的 CURL 调用。
有没有办法在服务器范围内修复 CURL 的 CA 问题,以便所有现有的应用程序代码按原样运行而无需修改?
Pau*_*der 19
我也遇到了同样的问题,经过一番摸索后发现,您可以直接从 curl 开发站点下载准备在 ubuntu 上 curl 的 CA 证书包。
cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem
Run Code Online (Sandbox Code Playgroud)
现在 curl 使用最新的包,你很高兴。
小智 9
在Ubuntu 12.04从命令行运行 curl 以获取 github 中的 aws 命令行工具时遇到了类似的问题。我发现如果我这样运行命令行:
curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt
Run Code Online (Sandbox Code Playgroud)
它会工作。但是尝试设置 CURL_CA_BUNDLE 环境变量以便我可以避免“cacert”参数不起作用。最终更新 ca 证书似乎解决了这个问题:
sudo update-ca-certificates
Run Code Online (Sandbox Code Playgroud)
作为旁注,有一次我从 curl.haxx.se 更新了 ca-certs,它没有解决问题,但可能是相关的。(sudo wget http://curl.haxx.se/ca/cacert.pem从 运行/etc/ssl/certs)。
通常,没有唯一实现并针对 OpenSSL 编译的软件将引用系统范围的 ca-bundle.crt,通常位于/usr/share/ssl/certs.
该位置在 Ubuntu 中可能不同,但 OpenSSL 包应包含 ca-bundle 文件。
CURL 有多种选项来指定它如何验证证书。
CURL_CA_BUNDLEca-bundle 文件位置的环境变量。--capath允许您指定 CA 证书所在的目录。(覆盖CURL_CA_BUNDLE)--cacert 允许您指定 CA 证书文件。在我的 CentOS 服务器上,我可以运行以下命令来识别 CURL 使用的 ca-bundle 路径:
$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
62076 次 |
| 最近记录: |