cURL-Fehler 60: SSL-Zertifikat: Lokales Aussteller-Zertifikat kann nicht abgerufen werden

Ich verwende WAMP in einer lokalen Entwicklungsumgebung und versuche, eine Kreditkarte zu belasten, erhalte aber die Fehlermeldung:

cURL-Fehler 60: SSL-Zertifikatsproblem: Lokales Ausstellerzertifikat kann nicht abgerufen werden

Ich habe viel bei Google gesucht und viele Leute schlagen vor, dass ich diese Datei herunterladen soll: cacert.pem herunterzuladen, sie irgendwo abzulegen und in meiner php.ini zu referenzieren. Dies ist der Teil in meiner php.ini:

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

Doch selbst nach mehreren Neustarts meines Servers und der Änderung des Pfads erhalte ich die gleiche Fehlermeldung.

Ich verwende WAMP über die Apache-Module und habe das ssl_modul aktiviert. Und bei den PGP-Erweiterungen habe ich php_curl aktiviert.

Immer noch die gleiche Fehlermeldung. Warum ist das so?

Jetzt folge ich dieser Lösung: Wie behebe ich PHP CURL Error 60 SSL

Das schlägt vor, dass ich diese Zeilen zu meinen cURL-Optionen hinzufüge:

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

Wo füge ich Optionen zu meinem cURL hinzu? Offensichtlich nicht über die Kommandozeile, da mein CLI den Befehl "curl_setopt&quot nicht findet;

EDIT

Dies ist der Code, den ich verwende:

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');
}

Guzzle, das von cartalyst/stripe verwendet wird, geht wie folgt vor, um ein geeignetes Zertifikatsarchiv zu finden, mit dem ein Serverzertifikat überprüft werden kann:

  1. Prüfen Sie, ob openssl.cafile in Ihrer php.ini-Datei gesetzt ist.
  2. Prüfen Sie, ob curl.cainfo in Ihrer php.ini Datei gesetzt ist.
  3. Prüfen Sie, ob /etc/pki/tls/certs/ca-bundle.crt vorhanden ist (Red Hat, CentOS, Fedora; bereitgestellt durch das ca-certificates Paket)
  4. Prüfen Sie, ob /etc/ssl/certs/ca-certificates.crt vorhanden ist (Ubuntu, Debian; bereitgestellt durch das ca-certificates-Paket)
  5. Prüfen Sie, ob /usr/local/share/certs/ca-root-nss.crt vorhanden ist (FreeBSD; bereitgestellt durch das Paket ca_root_nss)
  6. Prüfen Sie, ob /usr/local/etc/openssl/cert.pem existiert (OS X; bereitgestellt von homebrew)
  7. Prüfen Sie, ob C:\windows\system32\curl-ca-bundle.crt existiert (Windows)
  8. Prüfen Sie, ob C:\windows\curl-ca-bundle.crt vorhanden ist (Windows)

Um sicherzustellen, dass die Werte für die ersten beiden Einstellungen richtig definiert sind, sollten Sie einen einfachen Test durchführen:

echo "openssl.cafile: ", ini_get('openssl.cafile'), "\n";
echo "curl.cainfo: ", ini_get('curl.cainfo'), "\n";

Alternativ dazu können Sie versuchen, die Datei an den mit #7 oder #8 angegebenen Stellen zu speichern.

Kommentare (0)

Haben Sie versucht...

curl_setopt($process, CURLOPT_SSL_VERIFYPEER, false);

Wenn Sie eine vertrauenswürdige Quelle verwenden, müssen Sie das SSL-Zertifikat wohl nicht verifizieren.

Kommentare (0)

Da Sie Windows verwenden, denke ich, dass Ihr Pfadseparator '\' ist (und '/' unter Linux). Versuchen Sie, die Konstante DIRECTORY_SEPARATOR zu verwenden. Ihr Code wird dann portabler sein.

Versuchen Sie es:

curl_setopt($process, CURLOPT_CAINFO, dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cacert.pem');

EDIT: und geben Sie den vollständigen Pfad an. Ich hatte einige Probleme mit relativen Pfaden (vielleicht wird curl von einem anderen Basisverzeichnis aus ausgeführt?)

Kommentare (1)