Ich versuche, eine Curl-Anfrage mit meiner korrekten APP_ID, APP_SECRET usw. an die zu senden
https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI
Ich muss access_token daraus abrufen, aber eine FALSE erhalten und die curl_error()
nächste Nachricht ansonsten ausdrucken:
60: SSL certificate problem: self signed certificate in certificate chain
Mein Code lautet:
// create curl resource
$ch = curl_init();
// set url
curl_setopt($ch, CURLOPT_URL, $url);
//return the transfer as a string
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// $output contains the output string
$output = curl_exec($ch);
if ( ! $output) {
print curl_errno($ch) .': '. curl_error($ch);
}
// close curl resource to free up system resources
curl_close($ch);
return $output;
Wenn ich manuell zu dem obigen Link gehe, erhalte ich access_token gut. Warum funktioniert es nicht mit Locken? Hilfe bitte.
.crt
Verlängerung? Aber ich weiß nicht, wie ich ihn bekommen sollAntworten:
Antworten, die eine Deaktivierung vorschlagen,
CURLOPT_SSL_VERIFYPEER
sollten nicht akzeptiert werden. Die Frage ist "Warum funktioniert es nicht mit cURL" und wie von Martijn Hols richtig hervorgehoben, ist es gefährlich.Der Fehler wird wahrscheinlich dadurch verursacht, dass kein aktuelles Paket von CA-Stammzertifikaten vorhanden ist. Dies ist normalerweise eine Textdatei mit einer Reihe von kryptografischen Signaturen, mit denen Curl das SSL-Zertifikat eines Hosts überprüft.
Sie müssen sicherstellen, dass Ihre Installation von PHP eine dieser Dateien enthält und auf dem neuesten Stand ist (andernfalls laden Sie eine hier herunter: http://curl.haxx.se/docs/caextract.html ).
Dann setzen Sie in php.ini :
Wenn Sie es zur Laufzeit einstellen, verwenden Sie:
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
quelle
Diese Problemumgehung ist gefährlich und wird nicht empfohlen :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Es ist keine gute Idee, die SSL-Peer-Überprüfung zu deaktivieren. Andernfalls werden Ihre Anforderungen möglicherweise MITM-Angreifern ausgesetzt.
Tatsächlich benötigen Sie nur ein aktuelles CA-Stammzertifikat-Bundle. Die Installation eines aktualisierten ist so einfach wie:
Herunterladen der aktuellen
cacert.pem
Datei von der cURL-Website undFestlegen eines Pfads in Ihrer php.ini-Datei, z. B. unter Windows:
curl.cainfo=c:\php\cacert.pem
Das ist es!
Bleib sicher und geborgen.
quelle
php.ini
Dateiencurl_setopt ($curl_ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
Wenn die SSL-Zertifikate nicht ordnungsgemäß in Ihrem System installiert sind, wird möglicherweise folgende Fehlermeldung angezeigt:
Sie können dieses Problem wie folgt lösen:
Laden Sie eine Datei mit der aktualisierten Liste der Zertifikate von https://curl.haxx.se/ca/cacert.pem herunter
Verschieben Sie die heruntergeladene
cacert.pem
Datei an einen sicheren Ort in Ihrem SystemAktualisieren Sie Ihre
php.ini
Datei und konfigurieren Sie den Pfad zu dieser Datei:quelle
openssl.cafile="C:/dev/ssl/mywebsite.local.crt"
in der php.iniWichtig: Dieses Problem hat mich ein paar Tage lang verrückt gemacht und ich konnte nicht herausfinden, was mit meinen Curl & OpenSL-Installationen los war. Ich fand schließlich heraus, dass mein Zwischenzertifikat (in meinem Fall GoDaddy) veraltet war. Ich kehrte zu meinem Godaddy-SSL-Admin-Panel zurück, lud das neue Zwischenzertifikat herunter und das Problem verschwand.
Ich bin sicher, dass dies das Problem für einige von Ihnen ist.
Anscheinend hatte GoDaddy sein Zwischenzertifikat aufgrund von Sicherheitsproblemen irgendwann geändert, da jetzt diese Warnung angezeigt wird:
"Bitte verwenden Sie unbedingt die neuen SHA-2-Zwischenzertifikate, die in Ihrem heruntergeladenen Bundle enthalten sind."
Ich hoffe, das hilft einigen von Ihnen, denn ich war verrückt und das Problem wurde auf ALLEN meinen Servern behoben.
quelle
Solution: curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
quelle