web-dev-qa-db-fra.com

erreur cURL 60: certificat SSL dans Laravel 5.4

Erreur complète

RequestException in CurlFactory.php line 187: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

Scénario

Avant que quiconque ne m'indique ces deux réponses de laracasts: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-tocget-local-issuer certificat

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

Je les ai déjà regardés et c'est pourquoi je suis ici,

Le problème que j’ai, c’est que j’ai maintenant le fichier cacert.pem, MAIS ça n’a aucun sens de le dire, les réponses indiquent de placer le fichier dans mon répertoire xampp et de changer mon fichier php.ini mais je n’utilise pas xampp pour quoi que ce soit, im utilisant le serveur artisan de laravel pour exécuter mon projet. Si xampp n'est pas utilisé, où puis-je placer ce fichier et plus, alors pourquoi une réponse acceptée serait-il de le placer dans mon répertoire xampp, je ne comprends pas

Ma question exacte

Où dois-je placer le fichier cacert.pem pour arrêter cette erreur dans Laravel 5.4?

10
Yasmin French

Ne jamais modifier les fichiers du dossier vendor/. Déjà. Ils peuvent et seront écrasés lors de la prochaine mise à jour du compositeur que vous exécuterez.

Voici ma solution pour WampServer

J'utilise PHP 7.1.9 pour mon serveur WampServer, remplacez donc 7.1.9 par l'exemple ci-dessous par le numéro de version que vous utilisez actuellement.

  1. Téléchargez ce fichier: http://curl.haxx.se/ca/cacert.pem
  2. Placez ce fichier dans le dossier C:\wamp64\bin\php\php7.1.9
  3. Ouvrez php.iniet trouvez cette ligne:

;curl.cainfo

Changez le en:

curl.cainfo = "C:\wamp64\bin\php\php7.1.9\cacert.pem"

_ {Assurez-vous de supprimer le point-virgule au début de la ligne.} _

Enregistrez les modifications dans php.ini, redémarrez WampServer et le tour est joué!

42
kjdion84

C’était stressant à comprendre, mais voici la réponse exacte pour les personnes qui utilisent laravel et qui ont ce problème.

Les versions exactes de mes applications sont ...

Laravel: 5.4

Guzzlehttp: 6.2

Laravel Socialite: 3.0

Téléchargez une nouvelle copie de ce certificat curl à partir de ce lien: https://Gist.github.com/VersatilityWerks/5719158/download

Enregistrez le fichier dans ce chemin à partir de la racine de base de votre application laravel vendor/guzzlehttp/guzzle/src/cacert.pem 

next dans ce même répertoire, ouvrez RequestOptions.php et faites défiler jusqu'à la constante appelée CERT et remplacez-le par ce const CERT = 'cacert.pem';. Cela devrait régler tout le problème.

MODIFIER

Comme les gens le font remarquer, vous ne devriez jamais éditer le dossier du fournisseur, c’était simplement une solution rapide pour une application que je construisais pendant mon temps libre. Ce n'était pas quelque chose d'important comme une application pour mon entreprise ou quoi que ce soit, utilisez cette méthode à vos risques et périls! S'il vous plaît vérifier les réponses ci-dessous

6
Yasmin French

Une solution rapide mais peu sûre (non recommandé).

Utiliser cURL:

Définissez CURLOPT_SSL_VERIYPEER sur false

À l'aide de la gueule:

Définissez verify sur false

exemple $ client-> request ('GET', ' https://somewebsite.com ', ['verify' => false]);

2
Jeffrey

Un autre récemment demandé le même problème et il semble que ma réponse était la solution pour lui . Voici le post que je mentionne: URL Post

C'est ce que j'ai dit:

Je serai tout à fait honnête, je ne sais rien de Laravel. Mais j'avais le même problème, donc comme beaucoup d'autres, sur Symfony. Et donc comme vous j'ai essayé beaucoup de choses sans succès. 

Enfin, cette solution a fonctionné pour moi: solution URL

Cela indique qu'au lieu d'un problème de certificat, cela pourrait venir à partir d'un environnement non-compatibilité. J'ai utilisé XAMPP au lieu de WAMP et cela a fonctionné.

0
Doshibu
  • La solution suggérée par certains utilisateurs pour apporter des modifications au fichier \vendor\guzzlehttp\guzzle\src\Client.php constitue le pire conseil, car les modifications manuelles apportées au dossier du fournisseur sont remplacées si vous exécutez la commande composer update.
  • La solution suggérée par Jeffrey est un correctif simpliste, mais déconseillé dans les applications de production.
  • La solution suggérée par kjdion84 est parfaite si vous avez accès au fichier php.ini sur le serveur Web. Si vous utilisez l'hébergement mutualisé, il peut ne pas être possible de modifier le fichier php.ini.

Lorsque vous n'avez pas accès au fichier php.ini (par exemple, hébergement partagé)

  1. Téléchargez ce fichier: http://curl.haxx.se/ca/cacert.pem
  2. Placez ce fichier dans le dossier racine de votre projet Laravel.
  3. Ajoutez la clé verify au constructeur GuzzleHttp\Client avec sa valeur comme chemin d'accès au fichier cacert.pem.

Avec Laravel 5.7 et GuzzleHttp 6.0

// https://example.com/v1/current.json?key1=value1&key2=value2

$guzzleClient = new GuzzleHttp\Client([
    'base_uri' => 'https://example.com',
    'verify' => base_path('cacert.pem'),
]);

$response = $guzzleClient->get('v1/current.json', [
    'query' => [
        'key1' => 'value1',
        'key2' => 'value2',
    ]
]);

$response = json_decode($response->getBody()->getContents(), true);
0
Hamza Rashid