无法弄清楚可能是什么:
在我的本地环境中,在我将OSX更新到最后一个版本的Yosemite后,我收到此错误:
CurlException: [curl] 51: SSL: certificate verification failed (result: 5) [url]
我正在使用Symfony2,因此它与PHP有关。我试图重新安装openssl但没有任何反应。
有什么建议吗?
答案 0 :(得分:2)
查看证书链中的任何域名都会给您带来此错误。对我来说这是googleapis.com
openssl s_client -host www.googleapis.com -port 443
你会得到这样的东西:
CONNECTED(00000005)
depth=1 C = US, O = Google Trust Services, CN = Google Internet Authority G3
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=*.googleapis.com
i:/C=US/O=Google Trust Services/CN=Google Internet Authority G3
1 s:/C=US/O=Google Trust Services/CN=Google Internet Authority G3
i:/OU=GlobalSign Root CA - R2/O=GlobalSign/CN=GlobalSign
注意:我在修复问题后捕获了这个。此外,您的链输出看起来会有所不同。
然后你需要查看在apache 下运行的 php中允许的证书。在页面中运行phpinfo()。
<?php echo phpinfo();
然后通过搜索页面openssl.cafile
来查找从页面输出加载的证书文件:
openssl.cafile openssl.cafile /usr/local/php5/ssl/certs/cacert.pem
这是您需要通过向其添加正确的证书来修复的文件。
sudo nano /usr/local/php5/ssl/certs/cacert.pem
您基本上需要将正确的证书“签名”附加到此文件的末尾。
你可以在这里找到一些:
他们看起来像这样:
(注意:这是一张图片,所以人们不会简单地从stackoverflow复制/粘贴证书)
如果您需要将.crt转换为pem,则需要执行以下操作:
openssl x509 -inform DER -outform PEM -in GIAG2.crt -out GIA2.pem
在此文件中包含正确的证书后,重新启动apache并进行测试。
答案 1 :(得分:1)
有人问过类似的问题,请看这里:HTTPS and SSL3_GET_SERVER_CERTIFICATE:certificate verify failed, CA is OK
另外,这里有一篇文章:http://unitstep.net/blog/2009/05/05/using-curl-in-php-to-access-https-ssltls-protected-sites/
答案 2 :(得分:0)
尝试将curl从7.37.1(beta2附带)降级到7.37.0
答案 3 :(得分:0)
添加这些选项以忽略ceritificate:
curl_setopt($ ch,CURLOPT_SSL_VERIFYHOST,0); curl_setopt($ ch,CURLOPT_SSL_VERIFYPEER,0);
答案 4 :(得分:0)
修复此问题是取消设置 SSL_CERT_FILE
的值运行命令:
export SSL_CERT_FILE=""
然后尝试执行所需的操作,它将正常工作。