J'essaie d'envoyer une requête curl avec mes APP_ID, APP_SECRET, etc. corrects au
https://oauth.vk.com/access_token?client_id=APP_ID&client_secret=APP_SECRET&code=7a6fa4dff77a228eeda56603b8f53806c883f011c40b72630bb50df056f6479e52a&redirect_uri=REDIRECT_URI
Je dois obtenir access_token, mais obtenir un FALSE et curl_error()
imprimer le message suivant sinon:
60: SSL certificate problem: self signed certificate in certificate chain
Mon code est:
// 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;
Lorsque je passe manuellement au lien ci-dessus, je reçois bien access_token. Pourquoi ça ne marche pas avec curl? Aidez-moi, s'il vous plaît.
Réponses suggérant de désactiver CURLOPT_SSL_VERIFYPEER
ne devrait pas être accepté. La question est "Pourquoi ça ne marche pas avec cURL", et comme l'a si bien souligné Martijn Hols, c'est dangereux.
L'erreur est probablement due à l'absence d'un ensemble de certificats racine d'autorité de certification mis à jour. Il s’agit généralement d’un fichier texte contenant de nombreuses signatures cryptographiques que Curl utilise pour vérifier le certificat SSL de l’hôte.
Vous devez vous assurer que votre installation de PHP contient l'un de ces fichiers et qu'elle est à jour (sinon, téléchargez-en un ici: http://curl.haxx.se /docs/caextract.html ).
Alors défini dans php.ini :
curl.cainfo = <absolute_path_to> cacert.pem
Si vous le définissez à l'exécution, utilisez:
curl_setopt ($ch, CURLOPT_CAINFO, dirname(__FILE__)."/cacert.pem");
Cette solution de contournement est dangereuse et non recommandée :
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Ce n'est pas une bonne idée de désactiver la vérification SSL entre homologues. Cela pourrait exposer vos demandes à des attaquants de MITM.
En fait, vous avez simplement besoin d'un ensemble de certificats racine CA à jour. L'installation d'une mise à jour est aussi simple que:
cacert.pem
fichier de site Web cURL etDéfinir un chemin d'accès dans votre fichier php.ini, par exemple sous Windows:
curl.cainfo=c:\php\cacert.pem
C'est ça!
Restez en sécurité.
HEY GUYS: TRÈS IMPORTANT! Cette question m'a rendu fou pendant quelques jours et je ne pouvais pas comprendre ce qui se passait avec mes installations curl & openssl. J'ai finalement compris que c'était mon certificat INTERMÉDIAIRE (dans mon cas, GoDaddy) qui était obsolète. Je suis retourné à mon panneau d'administration SSL de GoDaddy, j'ai téléchargé le nouveau certificat intermédiaire et le problème a disparu.
Je suis sûr que c'est le problème pour certains d'entre vous.
Apparemment, GoDaddy avait changé son certificat intermédiaire à un moment donné, en raison de problèmes de sécurité, car il affiche désormais cet avertissement:
"Assurez-vous d'utiliser les nouveaux certificats intermédiaires SHA-2 inclus dans votre forfait téléchargé."
J'espère que cela aide certains d'entre vous, parce que j'étais fou et que cela a résolu le problème sur TOUS mes serveurs ...
Si les certificats SSL ne sont pas correctement installés sur votre système, vous pouvez obtenir cette erreur:
erreur cURL 60: problème de certificat SSL: impossible d'obtenir le certificat de l'émetteur local.
Vous pouvez résoudre ce problème comme suit:
Téléchargez un fichier avec la liste mise à jour des certificats de https://curl.haxx.se/ca/cacert.pem
Déplacez le fichier cacert.pem
Téléchargé dans un emplacement sûr de votre système.
Mettez à jour votre fichier php.ini
Et configurez le chemin d'accès à ce fichier: