Php CurlException:[curl]51:SSL:证书验证失败

Php CurlException:[curl]51:SSL:证书验证失败,php,symfony,curl,ssl,Php,Symfony,Curl,Ssl,不知道可能是什么: 在我的本地环境中,在我将OSX更新到Yosemite的最新版本后,出现以下错误: CurlException: [curl] 51: SSL: certificate verification failed (result: 5) [url] 我使用的是Symfony2,因此它与PHP相关。我试图重新安装openssl,但什么也没发生 有什么建议吗?有人问过类似的问题,请看这里: 此外,这里还有一篇文章:尝试将curl从7.37.1(随beta2提供)降级到7.37.0添

不知道可能是什么:

在我的本地环境中,在我将OSX更新到Yosemite的最新版本后,出现以下错误:

CurlException: [curl] 51: SSL: certificate verification failed (result: 5) [url] 
我使用的是Symfony2,因此它与PHP相关。我试图重新安装openssl,但什么也没发生


有什么建议吗?

有人问过类似的问题,请看这里:


此外,这里还有一篇文章:

尝试将curl从7.37.1(随beta2提供)降级到7.37.0

添加这些选项以忽略Certificate:

curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,0);
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0)

查看证书链,无论哪个域出现此错误。对我来说是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
openssl x509 -inform DER -outform PEM -in GIAG2.crt -out GIA2.pem
注意:我在修复问题后捕获了这个。此外,您的链输出将看起来不同

然后,您需要查看在apache下运行的php中允许的证书。在页面中运行phpinfo()

<?php echo phpinfo();
这是您需要通过向其中添加正确的证书来修复的文件

您基本上需要将正确的证书“签名”附加到此文件的末尾

您可以在这里找到其中一些:

它们看起来像这样:

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
openssl x509 -inform DER -outform PEM -in GIAG2.crt -out GIA2.pem

(注意:这是一个图像,因此人们不会简单地从stackoverflow复制/粘贴证书)

如果需要将.crt转换为pem,则需要执行以下操作:

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
openssl x509 -inform DER -outform PEM -in GIAG2.crt -out GIA2.pem

一旦正确的证书在此文件中,请重新启动apache并进行测试。

解决此问题的方法是取消设置SSL\u CERT\u文件的值。

运行以下命令:

export SSL_CERT_FILE=""
然后尝试执行所需的操作,它将正常工作


参考资料:

我已经尝试过这些解决方案,但不起作用。然而,在这一刻我发现了一个小技巧(见下面的答案),我发现所有基于PHP的SSL都失败了(从Beta 2开始就失败了)。还没有找到解决办法;我想知道你是否能找到解决办法。我认为这是旋度和约塞米蒂的错误。在命令行中尝试curl--cacert/path/to/cert.pemhttps://url。我也有同样的“51”错误。告诉PHP不要设置证书似乎对我很有用。看看