cURL错误60:ssl证书:无法获得本地颁发者证书

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (45)

我在本地开发环境中使用WAMP,并试图收取信用卡,但收到错误消息:

cURL错误60:SSL证书问题:无法获取本地颁发者证书

我在Google上搜索了很多,很多人都建议我下载这个文件:cacert.pem,放在某个地方并在我的php.ini中引用它。这是我的php.ini中的一部分:

curl.cainfo = "C:\Windows\cacert.pem"

然而,即使重新启动服务器多次并更改路径后,我也会得到相同的错误消息。

我使用Apache模块中的WAMP并启用了ssl_module。从PGP扩展中,我启用了php_curl。

仍然是相同的错误消息。为什么?

这表明我将这些行添加到我的cURL选项中:

curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
curl_setopt($process, CURLOPT_SSL_VERIFYPEER, true);

我在哪里添加选项到我的cURL?显然不是通过命令行,因为我的CLI没有找到命令“curl_setopt”

编辑

这是我正在运行的代码:

public function chargeStripe()
{
    $stripe = new Stripe;
    $stripe = Stripe::make(env('STRIPE_PUBLIC_KEY'));

    $charge = $stripe->charges()->create([
        'amount'   => 2900,
        'customer' => Input::get('stripeEmail'),
        'currency' => 'EUR',
    ]);

    dd($charge);

    // echo $charge[Input::get('stripeToken')];


    return Redirect::route('step1');
}
提问于
用户回答回答于

工作方案:

  • 假设在Windows上

XAMPP服务器

类似于其他环境 - 在这里下载并提取cacert.pem(一个干净的文件格式/数据)

https://curl.haxx.se/docs/caextract.html

  • 放在这里

C:\ XAMPP \ PHP \演员\ SSL \ cacert.pem

  • 在你的php.ini文件中放入这一行(“c:\ xampp \ php \ php.ini”):

;;;;;;;;;;;;;;;;;;;; ; php.ini Options ; ;;;;;;;;;;;;;;;;;;;; curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"

  • 重启你的webserver / apache

问题解决了!

用户回答回答于

如果你在Guzzle中使用PHP 5.6,Guzzle已经转而使用PHP库autodetect来获取证书,而不是它的过程(ref)。PHP概述了这里的变化。

找出PHP / Guzzle正在寻找证书的地方

你可以转储PHP正在使用的位置:

 var_dump(openssl_get_cert_locations());

获得证书包

对于OS X测试,你可以使用自制软件安装openssl brew install openssl,然后openssl.cafile=/usr/local/etc/openssl/cert.pem在你的php.ini或Zend Server设置(OpenSSL下)中使用。

curl网站上的curl / Mozilla也提供证书包:https//curl.haxx.se/docs/caextract.html

告诉PHP证书的地方

一旦你有了一个包,可以把它放在PHP已经在寻找的地方(你在上面找到的)或者openssl.cafile在php.ini中更新。(通常,/etc/php.ini/etc/php/7.0/cli/php.ini/etc/php/php.ini在Unix)。

扫码关注云+社区