在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
答案 0 :(得分:9)
这看起来像是自制的curl公式中的一个错误,我只有submitted a fix。 https://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。