首页 文章

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

提问于
浏览
7

在Mac OS Yosemite上安装Homebrew PHP 5.5之后,我发现我可以连接到外部SSL主机,之前提示我'Error Number:56 Error String:SSLRead() return error -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 . 现在那个不工作的人正在工作,但另一个工作的人却没有 . (抛出无法获得本地发行人的证书消息) . 任何智慧都会受到赞赏 .

EDITphp -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

1 回答

  • 9

    这看起来是自制的卷曲公式中的一个错误,我只是submitted a fix . https://canvas.instructure.com/ 拥有由GoDaddy颁发的证书,而这些证书似乎与使用酿造 openssl 的酿造 curl 无法合作 . 如果/当自制软件的维护者接受我的补丁时,你将能够简单地得到这个修复:

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

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

    $ 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请求安装 .

相关问题