Search code examples
phpsslcurlstripe-payments

cURL error 60: SSL certificate: unable to get local issuer certificate


I am trying to send an API request using Stripe but get the error message:

cURL error 60: SSL certificate problem: unable to get local issuer certificate

This is the code I am running:

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',
    ]);

    return Redirect::route('step1');
}

I searched a lot on Google and lots of people are suggesting that I download this file: cacert.pem, put it somewhere and reference it in my php.ini. This is the part in my php.ini:

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

Yet, even after restarting my server several times and changing the path, I get the same error message.

I have the ssl_module enabled in Apache, and I have php_curl enabled in my php.ini.

I have also tried another fix which suggests that I add these lines to my cURL options:

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

Where do I add options to my cURL? Apparently not through the command line, since my CLI doesn't find the command "curl_setopt"


Solution

  • How to solve this problem:

    • download and extract cacert.pem following the instructions at https://curl.se/docs/caextract.html

    • save it on your filesystem somewhere (for example, XAMPP users might use C:\xampp\php\extras\ssl\cacert.pem)

    • in your php.ini, put this file location in the [curl] section (putting it in the [openssl] section is also a good idea):

    [curl]
    curl.cainfo = "C:\xampp\php\extras\ssl\cacert.pem"
    
    [openssl]
    openssl.cafile = "C:\xampp\php\extras\ssl\cacert.pem"
    
    • restart your webserver (e.g. Apache) and PHP FPM server if applicable

    (Reference: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate)