【问题标题】:CurlException: [curl] 51: SSL: certificate verification failedCurlException: [curl] 51: SSL: 证书验证失败
【发布时间】:2014-10-14 22:48:50
【问题描述】:

不知道可能是什么:

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

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

我使用的是 Symfony2,所以它与 PHP 有关。我试图重新安装 openssl 但没有任何反应。

有什么建议吗?

【问题讨论】:

  • 我发现所有基于 PHP 的 SSL 都失败了(并且从 Beta 2 开始就失败了)。还没有找到解决办法;有兴趣知道您是否可以找到解决方案。
  • 我认为这是 cURL 和 Yosemite 的错误。在命令行中尝试curl --cacert /path/to/cert.pem https://url。我得到相同的“51”错误。告诉 PHP 不要设置证书似乎对我有用。看看github.com/guzzle/guzzle/issues/819

标签: php symfony curl ssl


【解决方案1】:

【讨论】:

  • 我已经尝试过这些解决方案,但没有奏效。然而,此刻我发现了一个小技巧(见下面的答案)。
【解决方案2】:

尝试将 curl 从 7.37.1(beta2 附带)降级到 7.37.0

【讨论】:

    【解决方案3】:

    添加这些选项以忽略证书:

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

    【讨论】:

      【解决方案4】:

      查看出现此错误的任何域的证书链。对我来说是 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 并进行测试。

      【讨论】:

        【解决方案5】:

        解决此问题的方法是取消设置 SSL_CERT_FILE

        的值

        运行命令:

        export SSL_CERT_FILE=""
        

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

        参考:Curl 'certificate verification failed' on mac

        【讨论】:

          猜你喜欢
          • 2015-06-05
          • 1970-01-01
          • 1970-01-01
          • 2019-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-28
          • 2021-10-08
          相关资源
          最近更新 更多