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
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?
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.
C:\wamp64\bin\php\php7.1.9
php.ini
et 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é!
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
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]);
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é.
\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
.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é)
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);