web-dev-qa-db-fra.com

Erreur Curl 60, problème de certificat SSL: certificat auto-signé dans la chaîne de certificats

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.

58
Victor Bocharsky

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");
149
erlangsec

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:

  1. Téléchargement de mises à jour cacert.pem fichier de site Web cURL et
  2. Dé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é.

46
zxcmehran

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 ...

3
Lee

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:

2
sunil