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

时间:2014-08-21 10:29:28

标签: php symfony curl ssl

无法弄清楚可能是什么:

在我的本地环境中,在我将OSX更新到最后一个版本的Yosemite后,我收到此错误:

CurlException: [curl] 51: SSL: certificate verification failed (result: 5) [url] 

我正在使用Symfony2,因此它与PHP有关。我试图重新安装openssl但没有任何反应。

有什么建议吗?

5 个答案:

答案 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

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

你可以在这里找到一些:

他们看起来像这样:

example certificate image

注意:这是一张图片,所以人们不会简单地从stackoverflow复制/粘贴证书

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

openssl x509 -inform DER -outform PEM -in GIAG2.crt -out GIA2.pem

在此文件中包含正确的证书后,重新启动apache并进行测试。

答案 1 :(得分:1)

答案 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=""

然后尝试执行所需的操作,它将正常工作。

参考:Curl 'certificate verification failed' on mac