【发布时间】:2018-06-21 16:21:12
【问题描述】:
我在 PHP 中使用 Rackspace API,但它刚刚停止工作(3 天前一切正常)。它使用 guzzle,谁使用 curl。而 curl 刚刚停止工作。
[Thu Jun 21 14:55:36 2018] [error] [client xxx.xx.xxx.xx] PHP Fatal error: Uncaught exception 'Guzzle\\Http\\Exception\\CurlException' with message '[curl] 60: [url] https://identity.api.rackspacecloud.com/v2.0/tokens' in
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php:359\nStack trace:\n#0
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(292): Guzzle\\Http\\Curl\\CurlMulti->isCurlException(Object(Guzzle\\Http\\Message\\EntityEnclosingRequest), Object(Guzzle\\Http\\Curl\\CurlHandle), Array)\n#1
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(257): Guzzle\\Http\\Curl\\CurlMulti->processResponse(Object(Guzzle\\Http\\Message\\EntityEnclosingRequest),
Object(Guzzle\\Http\\Curl\\CurlHandle), Array)\n#2
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(240): Guzzle\\Http\\Curl\\CurlMulti->processMessages()\n#3
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(224): Guzzle\\Http\\Curl\\CurlMulti->executeHandles()\n#4
/var/www/passline.com/vendor/guzzle/http/Guzzle/Http/Curl/CurlMulti.php(111)
错误的重要部分如下:
[curl] 60: [url]https://identity.api.rackspacecloud.com/v2.0/tokens
我从 Curl 收到错误 60,这意味着是 SSL 证书错误。大多数答案说这个问题的解决方案是:停用 ssl 或下载新证书。
curl: (60) SSL certificate : unable to get local issuer certificate
我不会停用 SSL,我不能使用 http 代替 https,我想避免进入机器并下载新证书。
如果有一天我再次拥有旧证书,我的网站将停止工作。解决此问题的正确方法是什么?
此服务器有 CenOs 6,我们使用的是 PHP 5.3.3 和 curl 7.19.7
---- 编辑----
所以,我的问题是因为 curl 证书的变化。来自https://curl.haxx.se/docs/caextract.html
此捆绑包生成于格林威治标准时间 2018 年 6 月 20 日星期三 03:12:06。
在 linux 上有一个名为 update-ca-certificates 的工具可以解决这个问题,而且 curl 网站说你可以运行
curl --remote-name --time-cond cacert.pem https://curl.haxx.se/ca/cacert.pem
但是,我不知道,有一天我会看到系统停止正常工作,我会进入机器运行此命令,仅此而已?,其他人在做什么?,设置一个 cron用这个命令?还是什么?
【问题讨论】:
-
1) 你在这里跑题了,因为这不是一个编程问题(所以请看Super User 或Server Fault 或Webmasters),但更重要的是2)“我得到一个错误60卷曲。” 没有提供任何有用的信息....显示您完整使用的 curl 命令,以及完整的结果。尽管您可以阅读,但“停用 SSL(原文如此)”从不是个好主意。你最好使用 HTTP 查询而不是 HTTPS,因为远程身份验证比传输机密性更重要。
-
我不拥有代码,所以我无法显示我正在使用的代码。 (我只是使用一个使用 guzzle 的 rackspace 库,他使用 curl)。结果就是那个“curl error 60”。我不会停用 SSL,这就是我问我不能进行 http 查询的原因,我不拥有我不知道 curl 是否自己下载证书的代码,或者所有这些是如何工作的。你确定这属于服务器故障吗?我宁愿避免在服务器中做任何事情。
-
您至少应该提供您尝试访问的 URL... 事情可能还取决于 PHP 版本、openssl 版本、curl 版本、API 版本、操作系统类型和版本。 ..你没有给出数据点。否则,您将只能得到可能会或可能不会解决您的问题的通用回复。而且您的问题与编程无关...
-
感谢您的帮助 Patrick,尝试将大部分请求信息添加到问题中。我应该更改其他内容吗?
-
非常感谢@lcjury 今天这救了我...