curl: (60) Problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local

258
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.
user3812540
la source
1
problème
jww
J'ai eu un problème similaire. Cela a fonctionné pour moi stackoverflow.com/a/29649024
Sagruob
Dans mon cas, superuser.com/a/719047/137881 a aidé.
Abdull
//, Dans mon cas, j'ai obtenu cette erreur en faisant des demandes de curl au serveur HashiCorp Vault jusqu'à ce que j'installe un certificat X509 avec l'entité finale / Intermédiaires / root uniquement dans l'ordre inverse, chacun étant encodé en Base64.
Nathan Basanese
//, Quelles recherches avez-vous faites à ce sujet avant de copier l'erreur ici?
Nathan Basanese

Réponses:

231

Relatif à l'erreur «Problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local». Il est important de noter que cela s'applique au système envoyant la demande CURL et NON au serveur recevant la demande.

  1. Téléchargez le dernier cacert.pem depuis https://curl.haxx.se/ca/cacert.pem

  2. Ajoutez la ligne suivante à php.ini: (s'il s'agit d'un hébergement partagé et que vous n'avez pas accès à php.ini, vous pouvez l'ajouter à .user.ini dans public_html).

    curl.cainfo="/path/to/downloaded/cacert.pem"

    Assurez-vous de placer le chemin entre guillemets doubles !!!

  3. Par défaut, le processus FastCGI analysera les nouveaux fichiers toutes les 300 secondes (si nécessaire, vous pouvez modifier la fréquence en ajoutant quelques fichiers comme suggéré ici https://ss88.uk/blog/fast-cgi-and-user-ini- files-the-new-htaccess / ).

Dahomz
la source
1
Le premier concerne la certification des opérations effectuées à l'aide de la bibliothèque OpenSSL; le second aux demandes faites en utilisant cURL
Mike
4
En fait, j'ai lutté pendant une heure car je n'ai pas écrit de chemin entre guillemets. Veuillez prendre note icicurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotes
Himanshu Upadhyay
12
Je ne vois aucune référence dans la question à PHP. Pourquoi les références dans la réponse? Si la question a été modifiée, la réponse pourrait-elle être modifiée pour refléter la ligne de commande actuellement utilisée?
Adam
5
@Adam Bien que la question ne mentionne pas PHP, cela apparaît comme le résultat de recherche n ° 1 dans Google pour le message d'erreur spécifique généré par PHP. Donc, peut-être que cela ne répond pas spécifiquement à la question d'OP, mais il semble que cela soit toujours utile à la communauté.
rinogo
1
Cette réponse m'a induit en erreur car il s'agit d'une solution liée à PHP
Wasif Khan
142

Il échoue car cURL ne peut pas vérifier le certificat fourni par le serveur.

Il existe deux options pour que cela fonctionne:

  1. Utilisez cURL avec l' -koption qui permet à curl d'établir des connexions non sécurisées, c'est-à-dire que cURL ne vérifie pas le certificat.

  2. Ajoutez l'autorité de certification racine (l'autorité de certification signant le certificat de serveur) à /etc/ssl/certs/ca-certificates.crt

Vous devez utiliser l'option 2 car c'est l'option qui garantit que vous vous connectez au serveur FTP sécurisé.

Yuvika
la source
1
J'ai ajouté mon fichier rootCA.pem à l'intérieur: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx 1 root root 1302 8 juillet 08 00:09 / etc / ssl / certs / rootCA.pem * Même j'ai vérifié le fichier ServerCertificate.pem avec mon rootCA.pem: - root @ sclrdev: / home / certs / FreshCerts # openssl verify -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: OK Et aussi le contenu de rootCA.pem dans ca-certificats.crt. root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certificates.crt -rw-r - r-- 1 root root 247945 8 juil. 00:10 / etc / ssl /certs/ca-certificates.crt
user3812540
Je ne suis pas en mesure de comprendre où je me trompe. Dans les traces WireShark, j'obtiens l'erreur suivante: - Client Hello Server Hello, Certificat, Server Hello Done Alert (niveau: Fatal, Description: CA inconnu (48)) Pouvez-vous me guider et m'aider?
user3812540
La façon dont openssl fonctionne est d'essayer de terminer la chaîne de certificats pendant la vérification. Votre certificat de serveur est-il signé par une autorité de certification intermédiaire et non par une autorité de certification racine. par exemple
Yuvika
Mon certificat est signé par l'autorité de certification racine uniquement.
user3812540
1
J'ai une erreur: - root @ sclrdev: ~ # openssl s_client -connect <server_ip>: 21 -showcerts CONNECTED (00000003) 3074050248: erreur: 140770FC: routines SSL: SSL23_GET_SERVER_HELLO: protocole inconnu: s23_clnt.c: 766: --- aucun certificat d'homologue disponible --- Aucun nom d'autorité de certification de certificat client envoyé --- La négociation SSL a lu 7 octets et écrit 225 octets --- Nouveau, (AUCUN), le chiffrement est (AUCUN) La renégociation sécurisée N'EST PAS prise en charge Compression: AUCUNE Expansion: AUCUN --- Je ne sais pas ce que cela signifie exactement?
user3812540
69

J'ai résolu ce problème en ajoutant un code de ligne dans le script cURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Avertissement : cela rend la demande absolument non sécurisée (voir la réponse de @YSU)!

Vijay Bhandari
la source
42
Cela peut aider à contourner le problème. Mais il manque totalement l'idée de https et du système de certification.
Stephan Richter
1
Travaux! Belle dérivation rapide et sale si vous ne vous souciez pas du certificat
Gilly
2
Cela le rend complètement peu sûr.
Moox
1
J'étais confronté à ce problème sur mon serveur local, même si le même code fonctionnait bien sur le serveur de transfert. Très bien pour moi car c'était sur local. Merci
sabin
1
ajoutez cette vérification pour vous assurer que vous ne l'utilisez qu'avec le serveur local if( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Hussain
20

Dans mon cas, cela s'est avéré être un problème avec l'installation de mon certificat sur le service que j'essayais de consommer avec cURL. J'ai échoué à regrouper / concaténer les certificats intermédiaires et racine dans mon certificat de domaine . Au début, il n'était pas évident que c'était le problème, car Chrome avait bien fonctionné et accepté le certificat malgré l'omission des certificats intermédiaire et racine.

Après avoir regroupé le certificat, tout a fonctionné comme prévu. J'ai groupé comme ça

$ cat intermediate.crt >> domain.crt

Et répété pour tous les intermédiaires et le certificat racine.

Daniel Watrous
la source
2
J'ai eu un problème similaire, sauf que mon Apache SSLCertificateChainFile n'a pas été défini sur le bon certificat.
Wayne Piekarski
1
Notez que si vous faites cela, et que les crt que vous ajoutez n'ont pas de nouvelle ligne de fin, alors vous aurez des lignes comme -----END CERTIFICATE----------BEGIN CERTIFICATE-----dans votre bundle, et vous obtiendrez l'erreur obscure:curl: (77) error setting certificate verify locations
Marty Neal
2
J'utilise des certificats letsencrypt mais j'ai déployé uniquement le certificat et la clé privée sur le serveur. Chrome et curl sur mon ordinateur ne se plaignaient pas, mais une application nodejs que je construisais n'a pas accepté le certificat. Le déploiement de la chaîne complète sur le serveur a résolu le problème! Merci d'avoir indiqué la bonne direction!
Paulo Santos
Dans mon cas (certificat de comodo), ils ont envoyé les certificats intermédiaires sous forme de forfait my-domain.ca. J'ai dû ajouter cela à my-domain.crt. Merci!
Jon Hulka
18

Pour moi, une simple installation de certificats a aidé:

sudo apt-get install ca-certificates
Maxim Krušina
la source
2
Par exemple, certains petits conteneurs Docker peuvent ne pas avoir installé cela et il est inutile de dépanner quoi que ce soit d'autre lorsque le package entier n'est pas présent.
muni764
16

Eu ce problème après l'installation de Git Extensions v3.48. J'ai essayé d'installer à nouveau mysysgit mais même problème. À la fin, j'ai dû désactiver (veuillez considérer les implications de sécurité!) Git SSL verification with:

git config --global http.sslVerify false

mais si vous avez un certificat de domaine, ajoutez-le à (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
Riga
la source
23
Fonctionne, mais donne l'impression de cacher le symptôme, pas de guérir la maladie.
MonoThreaded
4
La désactivation de la vérification SSL est très dangereuse
jonasl
1
Vous pourriez vous passer --globald'avoir SSL désactivé uniquement pour le référentiel où vous avez des problèmes. Voir groups.google.com/forum/#!topic/git-for-windows/mlqn5J4OLlw pour une discussion sur les fichiers crt nécessaires actuels.
koppor
13

Nous avons rencontré cette erreur récemment. Il s'avère que cela était lié au fait que le certificat racine n'était pas installé correctement dans le répertoire du magasin de CA. J'utilisais une commande curl où je spécifiais directement le répertoire CA. curl --cacert /etc/test/server.pem --capath /etc/test ...Cette commande échouait à chaque fois avec curl: (60) Problème de certificat SSL: impossible d'obtenir le certificat d'émetteur local.

Après utilisation strace curl ..., il a été déterminé que curl recherchait le fichier de certificat racine avec un nom de 60ff2731.0, qui est basé sur une convétion de nommage de hachage openssl. J'ai donc trouvé cette commande pour importer correctement le certificat racine correctement:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

qui crée un softlink

60ff2731.0 -> rootcert.pem

curl, sous les couvertures, lit le certificat server.pem, détermine le nom du fichier de certificat racine (rootcert.pem), le convertit en son nom de hachage, puis effectue une recherche de fichier OS, mais ne le trouve pas.

Donc, la conclusion est, utilisez strace lors de l'exécution de curl lorsque l'erreur curl est obscure (était une aide considérable), puis assurez-vous d'installer correctement le certificat racine en utilisant la convention de dénomination openssl.

gp-coder
la source
2
Ouf, ça a aidé. Pour élaborer un peu ce qui m'a aidé: a) exécuter strace curl ... b) rechercher stat échoué () avec quelque chose-hex.0 c) googlé pour quelque chose-hex, trouvé le certificat correspondant d) mettre le certificat trouvé dans / usr / certificats locaux / partagés / ca / ​​(avec l'extension * .crt, car * .pem ne fonctionnait pas) e) exécutez update-ca-certificats. Alors Bingo! - le lien symbolique nécessaire a été créé automatiquement dans / usr / lib / ssl / certs /
No-Bugs Hare
11

Il s'agit très probablement d'un certificat manquant du serveur.

Racine-> Intermédiaire-> Serveur

Un serveur doit envoyer le serveur et l'intermédiaire au minimum.

Utilisez openssl s_client -showcerts -starttls ftp -crlf -connect abc:21pour déboguer le problème.

Si un seul certificat est retourné (auto-signé ou émis), vous devez choisir:

  1. faire réparer le serveur
  2. faites confiance à ce certificat et ajoutez-le à votre magasin de certificats CA (ce n'est pas la meilleure idée)
  3. désactiver la confiance, par exemple curl -k(très mauvaise idée)

Si le serveur est retourné, plusieurs, mais sans inclure un certificat auto-signé (root):

  1. installez le certificat CA (racine) dans votre magasin CA pour la chaîne this, par exemple google l'émetteur. ( UNIQUEMENT si vous faites confiance à cette autorité de certification)
  2. faire réparer le serveur pour envoyer l'autorité de certification dans le cadre de la chaîne
  3. faites confiance à un cert dans la chaîne
  4. désactiver la confiance

Si le serveur a renvoyé un certificat d'autorité de certification racine, il ne se trouve pas dans votre magasin d'autorités de certification, vos options sont les suivantes:

  1. Ajoutez (faites confiance)
  2. désactiver la confiance

J'ai ignoré les certificats expirés / révoqués car aucun message ne l'indiquait. Mais vous pouvez examiner les certificats avecopenssl x509 -text

Étant donné que vous vous connectez à une édition familiale ( https://www.cerberusftp.com/support/help/installing-a-certificate/ serveur ftp de l' ), je vais dire qu'il est auto-signé.

Veuillez poster plus de détails, comme la sortie de openssl.

Jason Pyeron
la source
6

Selon les documents cURL, vous pouvez également passer le certificat à la curlcommande:

Obtenez un certificat CA qui peut vérifier le serveur distant et utilisez l'option appropriée pour signaler ce certificat CA pour vérification lors de la connexion. Pour les libcurlpirates:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

Avec l'outil de ligne de commande curl: --cacert [file]


Par exemple:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com
Giorgos Myrianthous
la source
5

Il suffit peut-être de simplement mettre à jour la liste des certificats

sudo update-ca-certificates -f

update-ca-certificats est un programme qui met à jour le répertoire / etc / ssl / certs pour contenir les certificats SSL et génère ca-certificats.crt, une liste concaténée d'un seul fichier de certificats.

Michael P. Bazos
la source
l'a fait et tout est fait après l'avoir exécuté. Mais la boucle ne fonctionne pas. toujours la même erreur.
AGamePlayer
1
J'ai commandé et cela n'a pas aidé, et je ne pouvais pas croire que je devais tout faire ci-dessus. Et puis votre réponse ... Merci pour le drapeau '-f'.
Alex Shtromberg
1
C'est aussi la solution à laquelle je suis parvenu. +1
SS Anne
3

Essayez de réinstaller curl dans Ubuntu et de mettre à jour mes certificats CA avec sudo update-ca-certificates --freshlesquels les certificats ont été mis à jour

Ankit Singh
la source
2

Sur Windows, j'avais ce problème. Curl a été installé par mysysgit, donc le téléchargement et l'installation de la dernière version ont résolu mon problème.

Sinon, ce sont des instructions décentes sur la façon de mettre à jour votre certificat CA que vous pouvez essayer.

Steve
la source
2

Oui, vous devez également ajouter un certificat CA. Ajout d'un extrait de code dans Node.js pour une vue claire.

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)
Ravi Prakash
la source
2

J'ai également rencontré ce problème. J'ai lu ce fil et la plupart des réponses sont informatives mais trop complexes pour moi. Je ne suis pas expérimenté dans les sujets de réseautage, donc cette réponse s'adresse à des gens comme moi.

Dans mon cas, cette erreur s'est produite car je n'ai pas inclus les certificats intermédiaire et racine à côté du certificat que j'utilisais dans ma demande.

Voici ce que j'ai obtenu du fournisseur de certificats SSL:

- abc.crt
- abc.pem
- abc-bunde.crt

Dans le abc.crtdossier, il n'y avait qu'un seul certificat:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

Si je le fournissais dans ce format, le navigateur ne montrerait aucune erreur (Firefox) mais j'obtiendrais curl: (60) SSL certificate : unable to get local issuer certificate erreur lorsque je la demande de curl.

Pour corriger cette erreur, vérifiez votre abc-bunde.crtfichier. Vous verrez très probablement quelque chose comme ceci:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Ce sont vos certificats intermédiaires et racine. Une erreur se produit car ils sont manquants dans le certificat SSL que vous fournissez à votre application.

Pour corriger l'erreur, combinez le contenu de ces deux fichiers dans ce format:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

Notez qu'il n'y a aucun espace entre les certificats, à la fin ou au début du fichier. Une fois que vous avez fourni ce certificat combiné à votre application, votre problème devrait être résolu.

Eorekan
la source
1

Sur Windows - si vous exécutez à partir de cmd

> curl -X GET "https://some.place"

Téléchargez cacert.pem depuis https://curl.haxx.se/docs/caextract.html

Définir la variable d'environnement:

CURL_CA_BUNDLE = C:\Program Files\curl-7.57.0\src\cacert.pem

et recharger l'environnement

refreshenv

Maintenant réessayez

Raison du problème: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/95548

RaSor
la source
1

Mon cas était différent. J'héberge un site derrière un pare-feu. L'erreur a été provoquée par pfSense.

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

J'ai accidentellement trouvé la cause, grâce à cette réponse .


Tout va bien lorsque j'ai accédé à mon site depuis l'AMJ.

Cependant, lorsque le site est accessible depuis un réseau local (par exemple, lorsque Wordpress fait une curldemande à son propre serveur, malgré l'utilisation de l'adresse IP WAN49.x.x.x ), la page de connexion pfSense lui a été envoyée.

J'ai identifié le certificat comme pfSense webConfigurator Self-Signed Certificate. Pas étonnant qu'il ait curljeté une erreur.

Cause: ce qui s'est passé, c'est que vous curlutilisiez l'adresse IP WAN du site 49.x.x.x. Mais, dans le contexte du serveur Web, l'IP WAN était le pare-feu.

Déboguer: j'ai constaté que j'obtenais le certificat pfSense.

Solution: sur le serveur hébergeant le site, pointez son propre nom de domaine vers 127.0.0.1

En appliquant la solution, curlla demande de a été correctement gérée par le serveur Web et n'a pas été transmise au pare-feu qui a répondu en envoyant la page de connexion.

PNDA
la source
0

Il s'agit d'un problème de magasin de certificats ssh. Vous devez télécharger le fichier pem de certificat valide à partir du site Web de l'autorité de certification cible, puis créer le fichier de lien logiciel pour indiquer à SSL le certificat de confiance.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

tu auras dd8e9d41

construire un lien solf avec un numéro de hachage et suffixer le fichier avec un .0 (point zéro)

dd8e9d41.0

Réessayez ensuite.

Roger
la source
0
  1. Téléchargez https://curl.haxx.se/ca/cacert.pem

  2. Après le téléchargement, déplacez ce fichier sur votre serveur Wamp.

    Pour exp: D: \ wamp \ bin \ php \

  3. Ajoutez ensuite la ligne suivante au fichier php.ini en bas.

curl.cainfo = "D: \ wamp \ bin \ php \ cacert.pem"

  1. Redémarrez maintenant votre serveur Wamp.
sandeep kumar
la source
0

Vous devez changer le certificat du serveur de cert.pemà fullchain.pem
J'ai eu le même problème avec Perl HTTPS Daemon:
J'ai changé:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
en:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'

k-messaoudi
la source
-1

Jusqu'à présent, j'ai vu ce problème se produire dans les réseaux d'entreprise pour deux raisons, l'une ou les deux pouvant se produire dans votre cas:

  1. En raison de la façon dont les proxys réseau fonctionnent, ils ont leurs propres certificats SSL, modifiant ainsi les certificats que curl voit. Beaucoup ou la plupart des réseaux d'entreprise vous obligent à utiliser ces proxys.
  2. Certains programmes antivirus exécutés sur des PC clients agissent également de la même manière qu'un proxy HTTPS, de sorte qu'ils peuvent analyser votre trafic réseau. Votre programme antivirus peut avoir une option pour désactiver cette fonction (en supposant que vos administrateurs l’autorisent).

En guise de remarque, le n ° 2 ci-dessus peut vous inquiéter du fait que votre trafic TLS supposément sécurisé soit analysé. C'est le monde de l'entreprise pour vous.

rdguam
la source
-1

Eu ce problème et il n'a pas été résolu avec une version plus récente. / etc / certs avait le certificat racine, le navigateur a dit que tout allait bien. Après quelques tests, j'ai reçu de ssllabs.com l'avertissement, que ma chaîne n'était pas complète (en effet, c'était la chaîne pour l'ancien certificat et non le nouveau). Après avoir corrigé la chaîne cert, tout allait bien, même avec une boucle.

Franc
la source
-1

J'ai eu ce problème avec Digicert de toutes les autorités de certification. J'ai créé un fichier digicertca.pem qui était à la fois intermédiaire et racine collé ensemble dans un seul fichier.

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

Eorekan avait la réponse, mais seulement moi et un autre pour voter sa réponse.

Kirt Carson
la source
-2

Spécifiquement pour les Windowsutilisateurs, utilisant curl-7.57.0-win64-mingwou version similaire.

C'est un peu tard et les réponses existantes sont correctes. Mais j'ai encore eu du mal à le faire fonctionner sur ma machine Windows, bien que le processus soit en fait assez simple. Donc, partager le processus étape par étape.

Cette erreur signifie essentiellement que curl ne parvient pas à vérifier le certificat de l'URI cible. Si vous faites confiance à l'émetteur du certificat (CA), vous pouvez l'ajouter à la liste des certificats approuvés.

Pour cela, parcourez l'URI (par exemple sur Chrome) et suivez les étapes

  1. Clic droit sur l'icône du cadenas sécurisé
  2. Cliquez sur le certificat, cela ouvrira une fenêtre avec les détails du certificat
  3. Accédez à l'onglet «Chemin de certification»
  4. Cliquez sur le certificat ROOT
  5. Cliquez sur Afficher le certificat, cela ouvrira une autre fenêtre de certificat
  6. Accédez à l'onglet Détails
  7. Cliquez sur Copier dans un fichier, cela ouvrira l'assistant d'exportation
  8. Cliquez sur Suivant
  9. Sélectionnez «Base-64 encodé X.509 (.CER)»
  10. Cliquez sur Suivant
  11. Donnez un nom convivial, par exemple «MyDomainX.cer» (accédez au répertoire souhaité)
  12. Cliquez sur Suivant
  13. Cliquez sur Terminer, il enregistrera le fichier de certificat
  14. Ouvrez maintenant ce .cerfichier et copiez le contenu (y compris ----- BEGIN CERTIFICATE ----- et ----- END CERTIFICATE -----)
  15. Maintenant, allez dans le répertoire où curl.exeest enregistré par exempleC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Ouvrez le curl-ca-bundle.crtfichier avec un éditeur de texte
  17. Ajoutez le texte du certificat copié à la fin du fichier. sauver

Maintenant, votre commande devrait s'exécuter correctement en boucle.

Arghya C
la source
3
Un commentaire sur la raison du
vote négatif
Je ne trouve aucun fichier nommé "curl-ca-bundle.crt" dans "C: \ xampp \ apache \ bin" (windows). Je suppose que les votes négatifs étaient dus à cela. J'ai mon "curl.exe" dans le dossier "bin" mentionné ci-dessus
kathikeyan A
-4

cela peut vous aider à mieux comprendre:

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

testé sur guzzle / guzzle 3. *

fico7489
la source
-5

Solution simple: IN ~/.sdkman/etc/config, changesdkman_insecure_ssl=true

Étapes:
nano ~/.sdkman/etc/config
changement sdkman_insecure_ssl=falsepour sdkman_insecure_ssl=true
enregistrer et quitter

biniam
la source