Comment dois-je traiter avec des certificats à l'aide de cURL, tout en essayant d'accéder à une url HTTPS?
J'obtiens l'erreur suivante à l'aide de curl:
curl: (77) erreur de configuration du certificat de vérifier les emplacements: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: aucun
Comment puis-je régler ce certificat vérifier les emplacements? Merci.
- Quel OS/distrib êtes-vous? Vous devez installer le paquet ca-certificates (c'est ce qu'il est appelé sur debian/ubuntu).
- Pour référence future, je l'avais déjà
ca-certificates
installé, mais l'erreur persiste. Le problème était que mes certificats ont été situé dans/etc/ssl/certs/ca-certificates.crt
au lieu de/etc/pki/tls/certs/ca-bundle.crt
, donc j'ai juste eu à définir la variable d'environnementCURL_CA_BUNDLE
pour le chemin d'accès correct. - Cool! Il fonctionne pour moi lorsque j'ai mis
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
. - Merci!
Vous devez vous connecter pour publier un commentaire.
Cette erreur est liée à un paquet manquant:
ca-certificates
. L'installer.Dans Ubuntu Linux (et autres distro):
Dans CygWin via Apt-Cyg
Dans Arch Linux (Raspberry Pi)
La documentation dit:
Comme on le voit dans: Debian -- Détails du paquet ca-certificates dans squeeze
pacman -S ca-certificates-utils
. Je l'ai fait.apt-cyg remove ca-certificates
et puisapt-cyg install ca-certificates
sudo apt install --reinstall ca-certificates
réinstallé le paquet et résolu les erreurs que j'ai été voirJ'ai également eu la nouvelle version de ca-certificates installé, mais était encore en train de l'erreur:
Le problème était que le curl attendu que le certificat soit sur le chemin d'accès
/etc/pki/tls/certs/ca-bundle.crt
mais ne pouvait pas le trouver, car il était à la voie/etc/ssl/certs/ca-certificates.crt
.La copie de mon certificat à la destination prévue par l'exécution de
a fonctionné pour moi. Vous aurez besoin de créer des dossiers pour la cible, si elles n'existent pas en cours d'exécution
Si nécessaire, modifiez la commande ci-dessus pour rendre le nom de fichier de destination correspondre au chemin d'accès prévu par curl, c'est à dire remplacer
/etc/pki/tls/certs/ca-bundle.crt
avec le chemin d'accès suivant "CAfile:" dans votre message d'erreur.ln -s
si vous ne voulez pas de re-copier à chaque fois que vous le mettez à jour.rescuetime
application sur Fedora 25.sudo ln -s /etc/pki/tls/certs/ca-bundle.crt /etc/pki/tls/certs/ca-certificates.crt
résolu le problème. (CURL_CA_BUNDLE
env var n'a pas fonctionné)Mettre ceci dans votre
.bashrc
(voir le commentaire de Robert)
$CURL_CA_BUNDLE = "/etc/ssl/certs/ca-certificates.crt"
à la.xonshrc
).CURL_CA_BUNDLE=/path/to/bundle.crt curl http://example.com
Créer un fichier
~/.curlrc
avec le contenu suivantLe moyen le plus rapide pour contourner l'erreur est d'ajouter l'option-k quelque part dans votre demande curl. Que l'option "permet les connexions SSL cites sans certs." (à partir de curl --help)
Être conscient que cela peut signifier que vous n'êtes pas en parler à l'extrémité vous pensez que vous êtes, car ils sont la présentation d'un certificat n'est pas signé par une autorité de certification de confiance.
Par exemple:
m'a donné l'erreur suivante réponse:
J'ai ajouté sur k:
et aucun message d'erreur. Comme un bonus, maintenant, j'ai apt-cyg installé. Et ca-certificates.
-k
drapeau signifie que vous êtes perdre vérification. Selon vos besoins, cela peut être acceptable. MITM sont non-trivial attaques si vous supposez votre réseau et le serveur que vous êtes en communication avec sont garantis à partir d'intrus (pouvez-vous faire une telle supposition?). Le risque augmente en fonction du type de données (code source et certs sont plus risqués que les images). Vous pouvez vérifier l'intégrité des données après le transfert (les sommes de contrôle, etc.) mais maintenant vous êtes à déplacer votre confiance sur le canal de la somme de contrôle. En fin de compte-k
vous donne un peu plus de travail.-k
serait de travailler avec aucun certificat. Les certificats auto-signés devrait fonctionner (si vous dites àcurl
à ce sujet).@roens est correct. Cela affecte toutes les Anaconda utilisateurs, avec d'erreur ci-dessous
curl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
La solution de contournement consiste à utiliser la valeur par défaut du système de roulage et de éviter de jouer avec la préfixé Anaconda
PATH
variable. Vous pouvez soitRenommer l'Anaconda curl binaire 🙂
mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda
OU supprimer Anaconda curl
conda remove curl
$ which curl
/usr/bin/curl
[0] Anaconda Ubuntu curl Github question https://github.com/conda/conda-recipes/issues/352
curl
avec le chemin d'accès complet/usr/bin/curl
De
$ man curl
:Cela a fonctionné pour moi
puis aller dans le dossier de certificats à
ensuite, vous copiez le ca-certificates.crt fichier dans le
/etc/pki/tls/certs
si il n'y a pas de tls/certs dossier: créer et de modifier les autorisations à l'aide de la commande chmod 777 -R folderNAME
Une autre solution pour résoudre ce problème est de désactiver la validation du certificat:
De code PHP en cours d'exécution sur XAMPP sous Windows j'ai trouvé j'ai besoin de modifier php.ini pour inclure le ci-dessous
et ensuite copier un fichier https://curl.haxx.se/ca/cacert.pem et renommer curl-ca-bundle.le tube et le placer sous \xampp chemin (je ne pouvais pas obtenir curl.capath de travail). J'ai aussi trouvé le CAbundle sur le cURL site n'était pas assez pour le site distant, j'étais connexion, donc utilisé celui qui est répertorié avec un pré-compilé la version Windows de curl 7.47.1 à http://winampplugins.co.uk/curl/
curl effectue
SSL
de la vérification du certificat par défaut, à l'aide d'un "bundle"de
Certificate Authority (CA)
clés publiques (CA cert). La valeur par défautbundle est nommé curl-ca-bundle.crt; vous pouvez spécifier un autre fichier
à l'aide de l' --cacert option.
Si ce
HTTPS
serveur utilise un certificat signé par une autorité de certification représentés dansle bundle, le certificat de vérification probablement échoué en raison d'une
problème avec le certificat (peut-être expiré ou que le nom pourrait
ne pas correspondre au nom de domaine dans l'URL).
Si vous souhaitez désactiver curl vérification du certificat, l'utilisation
le-k (ou
--insecure
) option.par exemple
Il semble que votre curl points pour un fichier non-existant avec CA certs ou similaire.
Pour la base de référence sur CA cert avec curl, voir: https://curl.haxx.se/docs/sslcerts.html
Pour ce que ça vaut, la vérification de
which curl
est en cours d'exécution est également significatif.Un utilisateur partagée, sur une machine que je maintiens, avait été de faire cette erreur. Mais la cause s'est avéré être parce qu'ils avaient installé Anaconda (http://continuum.io). Faire mettre Anaconda binaire du chemin avant de la norme
$PATH
, et il est livré avec son proprecurl
binaire, qui avait de la difficulté à trouver le défaut certs que ont été installé sur cette machine Ubuntu.which -a curl
de voir tout ce qui est disponible, et bien sûr de noter que l'on vient sur le dessus.J'ai eu exactement le même problème. Comme il s'avère, mon
/etc/ssl/certs/ca-certificates.crt
fichier a été mal formé. La dernière entrée a montré quelque chose comme ceci:Après l'ajout d'un saut de ligne avant
-----END CERTIFICATE-----
, curl a été en mesure de le manipuler le fichier de certificats.C'était très ennuyeux pour savoir depuis mon
update-ca-certificates
commande ne m'a pas donné d'avertissement.Cela peut ou peut ne pas être une version du problème spécifique de la boucle, voici donc ma version, juste pour être complet:
Exécuter la commande suivante dans git bash qui fonctionne très bien pour moi
Si vous utilisez homebrew sur macOS ou linuxbrew dans linux, essayez de réinstaller le
openssl
etcurl
avec les étapes suivantes de cette page.Vous pourriez avoir besoin pour commencer une nouvelle session de shell pour vérifier le résultat avec
Si elle montre de sortie en sortie, le problème devrait être résolu!
Références:
Il suffit de créer les dossiers, ce qui est manquant dans votre système..
et de créer le fichier à l'aide de la commande suivante,
puis copiez et collez le certificat dans le dossier de destination, qui est de montrer dans votre erreur.. le mien était "
with message 'error setting certificate verify locations: CAfile: /etc/pki/tls/certs/ca-bundle.crt CApath: none' in
" assurez-vous de coller le fichier à l'emplacement exact mentionné dans l'erreur. Utilisez la commande suivante pour copier coller..Fixe.
L'erreur est due à corrompus ou manquants SSL chaîne fichiers de certificats de l'ICP répertoire.
Vous devrez vous assurer que les fichiers ca-bundle, comme suit:
Dans votre console/terminal:
Entrer sur ce site: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , obtenir votre autorité de certification-certificat, DONC.
Copier l'url de téléchargement et de le coller dans l'url:
wget your_url_donwload_ca-ceritificated.tr /min
maintenant, installez yout tr /min:
maintenant redémarrer votre service:
mon exemple de cette commande:
Résolution de ce problème pour moi :
J'ai trouvé ce correctif à être un moyen facile et sécurisé correctif.
Il a juste implique de modifier le chemin d'accès de deux valeurs à la
php.ini
fichier.Suivez les instructions ici:
https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate
Soufflet de décrire les étapes à résolu les problèmes.
1. Découvrez le fichier existe sur le définir des url.
2. Si non, alors téléchargez le fichier à partir de l'url. https://curl.haxx.se/ca/cacert.pem
3. Copie de pest et de le fichier dans le chemin d'accès défini par php.fichier ini.
4. Redémarrer le service apache.
J'ai eu ce problème et il s'est avéré que ma version de CURL ne pouvait pas analyser DER certificats codés (et qui n'a pas de prêter attention à l' --cert-type d'option, soit). Quand je me suis converti le certificat au format PEM, il a travaillé.