Curl导致SSL:无法获得本地颁发者证书

时间:2014-10-31 03:00:35

标签: php macos ssl curl

在Mac OS Yosemite上按照此答案steps安装Homebrew PHP 5.5后,我发现我可以连接到外部SSL主机,这会提示我'错误号:56错误字符串:SSLRead()返回错误 - 9806'之前。 这个问题已得到解决。

但是现在,在我的日常工作中,我遇到了另一个HOST:Canvas API的另一个SSL问题。

在终端上运行以下Curl(使用OSX原生卷曲)

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X GET \
  -d '{"userid": "mohit", "password":"password"}' https://canvas.instructure.com/api/v1/accounts

工作正常,但通过PHP我收到SSL证书问题:无法获得本地颁发者证书。

所以我现在修复了我在PHP Curling中使用OpenSSL的原始问题,但是我遇到了这个新问题。

我确实尝试将一个PEM文件添加到我的php.ini,curl.cainfo = "/usr/local/cacert.pem"但是又触发了另一个错误

error setting certificate verify locations: CAfile: /usr/local/cacert.pem CApath: none.

我有点疑惑。我需要让Brew PHP Curl版本适用于两个API。现在那个不工作的人正在工作,但另一个工作的人却没有。 (抛出无法获得本地发行人的证书消息)。任何智慧都会受到赞赏。

编辑 :来自php -i的卷曲输出:

cURL support => enabled
cURL Information => 7.38.0
Age => 3
Features
AsynchDNS => No
CharConv => No
Debug => No
GSS-Negotiate => No
IDN => No
IPv6 => Yes
krb4 => No
Largefile => Yes
libz => Yes
NTLM => Yes
NTLMWB => Yes
SPNEGO => No
SSL => Yes
SSPI => No
TLS-SRP => Yes
Protocols => dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps,
             pop3, pop3s, rtsp, smtp, smtps, telnet, tftp
Host => x86_64-apple-darwin14.0.0
SSL Version => OpenSSL/1.0.1j
ZLib Version => 1.2.5

2 个答案:

答案 0 :(得分:9)

这看起来像是自制的curl公式中的一个错误,我只有submitted a fixhttps://canvas.instructure.com/拥有由GoDaddy颁发的证书,而这些证书似乎与使用酿造curl的酿造openssl无关。如果/当自制软件的维护者接受我的补丁时,您将能够通过以下方式获得此修复:

$ brew rm curl # remove your broken brewed curl
$ brew update
$ brew install --with-openssl curl

在此之前,您可以直接从我的拉取请求安装修复程序,如下所示:

$ brew rm curl # remove your broken brewed curl
$ brew install --with-openssl https://raw.githubusercontent.com/asaph/homebrew/curl-openssl-godaddy-ca-bug/Library/Formula/curl.rb

更新

自制维护者merged my patch所以修复现在正式在自制软件中。所以只需运行我上面描述的前3个命令。无需再从pull请求安装。

答案 1 :(得分:0)

就我而言,证书本身存在问题。

我不是这样创建捆绑包的:

#cat public.crt intermediate.crt >> bundle.crt

我只使用public.crt。

因此,如果您具有中间证书,请尝试创建一个捆绑包。

请注意,捆绑包中的证书顺序很重要-必须首先使用public.crt。

try to check my answer in the parallel topic