Comment gérer les certificats en utilisant cURL tout en essayant d'accéder à une url HTTPS?
j'obtiens l'erreur suivante en utilisant https://over.wiki/curl/" class="blnk">curl:
curl: (77) error setting certificate verify locations: CAfile: /etc/ssl/certs/ca-certificates.crt CApath: none
comment configurer ce certificat pour vérifier les emplacements? Grâce.
18 réponses
cette erreur est liée à un colis manquant : ca-certificates
. L'installer.
dans Ubuntu Linux (et distribution similaire):
# apt-get install ca-certificates
in CygWin via Apt-Cyg
# apt-cyg install ca-certificates
In Arch Linux (Raspberry Pi)
# pacman -S ca-certificates
la documentation dit:
ce paquet inclut les fichiers PEM des certificats de L'AC pour permettre aux applications basées sur SSL de vérifier l'authenticité des connexions SSL.
Comme Vu à: Debian -- détails du paquet ca-certificats dans squeeze
j'ai aussi fait installer la plus récente version de CA-certificats, mais j'ai quand même eu l'erreur:
curl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
la question était que curl s'attendait à ce que le certificat soit à la voie /etc/pki/tls/certs/ca-bundle.crt
mais ne pouvait pas le trouver parce qu'il était à la voie /etc/ssl/certs/ca-certificates.crt
.
copier mon certificat vers la destination prévue en exécutant
sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt
travaillait pour moi. Vous aurez besoin de créer des dossiers pour la destination cible s'ils n'existent pas en exécutant
sudo mkdir -p /etc/pki/tls/certs
si nécessaire, modifiez la commande ci-dessus pour que le nom du fichier de destination corresponde au chemin prévu par curl, c.-à-d. remplacer /etc/pki/tls/certs/ca-bundle.crt
par le chemin suivant" CAfile: "dans votre message d'erreur.
mettez ceci dans votre .bashrc
# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
(voir le commentaire de Robert)
créer un fichier ~/.curlrc
avec le contenu suivant
cacert=/etc/ssl/certs/ca-certificates.crt
le moyen Le plus rapide pour contourner l'erreur est d'ajouter l'option-k quelque part dans votre demande curl. Cette option " permet des connexions à SSL cites sans certs."(à partir de curl --help)
sachez que cela peut signifier que vous ne parlez pas au point final que vous pensez que vous êtes, car ils présentent un certificat non signé par une AC en qui vous avez confiance.
par exemple:
$ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg
m'a donné la réponse d'erreur suivantes:
curl: (77) error setting certificate verify locations:
CAfile: /usr/ssl/certs/ca-bundle.crt
CApath: none
j'ai ajouté on-k:
curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k
et aucun message d'erreur. En prime, j'ai installé apt-cyg. Et ca-certificats.
@roens est correct. Cela affecte tous les utilisateurs Anaconda , avec l'erreur ci-dessous
curl: (77) error setting certificate verify locations:
CAfile: /etc/pki/tls/certs/ca-bundle.crt
CApath: none
la solution est d'utiliser le curl de système par défaut et éviter de toucher avec la variable Anaconda PATH
pré-programmée. Vous pouvez soit
-
renommer le binaire Anaconda curl:)
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 issue https://github.com/conda/conda-recipes/issues/352
de $ man curl
:
--cert-type <type>
(SSL) Tells curl what certificate type the provided certificate
is in. PEM, DER and ENG are recognized types. If not specified,
PEM is assumed.
If this option is used several times, the last one will be used.
--cacert <CA certificate>
(SSL) Tells curl to use the specified certificate file to verify
the peer. The file may contain multiple CA certificates. The
certificate(s) must be in PEM format. Normally curl is built to
use a default file for this, so this option is typically used to
alter that default file.
une autre solution consiste à désactiver la validation du certificat:
echo insecure >> ~/.curlrc
pour le code PHP tournant sur XAMPP sous Windows j'ai trouvé que j'avais besoin d'éditer php.ini pour inclure les en-dessous de
[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = curl-ca-bundle.crt
et ensuite copier dans un fichier https://curl.haxx.se/ca/cacert.pem et renommer en curl-ca-bundle.crt et le placer sous \XAMPP path (Je n'ai pas pu obtenir curl.capath de travail). J'ai également trouvé que le CAbundle sur le site cURL n'était pas suffisant pour le site distant auquel je me connectais, donc utilisé un qui est répertorié avec une pré-compilé Windows version de curl 7.47.1 à http://winampplugins.co.uk/curl /
il semble que votre boucle pointe vers un fichier non-existant avec des ca certs ou similaire.
pour la référence primaire sur les ca certs à boucle, voir: https://curl.haxx.se/docs/sslcerts.html
cela a fonctionné pour moi
sudo apt-get install ca-certificates
puis allez dans le dossier Certificats à
sudo cd /etc/ssl/certs
ensuite vous copiez les ca-certificats.crt fichier dans le /etc/pki/tls/certs
sudo cp ca-certificates.crt /etc/pki/tls/certs
s'il n'y a pas de dossier tls/certs: créez-en un et changez les permissions en utilisant chmod 777-r folderNAME
pour ce que ça vaut, vérifier which curl
est aussi significatif.
un utilisateur sur une machine partagée que je maintiens avait reçu cette erreur. Mais la cause s'est avérée être parce qu'ils avaient installé Anaconda ( http://continuum.io ). Ce faisant, mettre le chemin binaire D'Anaconda avant le standard $PATH
, et il est livré avec son propre curl
binaire, qui a eu de la difficulté à trouver les certs par défaut que étaient installé sur cette machine Ubuntu.
j'ai eu exactement le même problème. Il s'avère que mon dossier /etc/ssl/certs/ca-certificates.crt
était mal formé. La dernière entrée montrait quelque chose comme ceci:
-----BEGIN CERTIFICATE-----
MIIEDTCCAvWgAwIBAgIJAN..lots of certificate text....AwIBAgIJAN-----END CERTIFICATE-----
après avoir ajouté une nouvelle ligne avant -----END CERTIFICATE-----
, curl a pu gérer le fichier de certificats.
c'était très ennuyeux à découvrir puisque ma commande update-ca-certificates
ne me donnait aucun avertissement.
c'est peut-être ou non un problème spécifique à la version de curl, donc voici mon version, juste pour complétude:
curl --version
# curl 7.51.0 (x86_64-alpine-linux-musl) libcurl/7.51.0 OpenSSL/1.0.2j zlib/1.2.8 libssh2/1.7.0
# Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp sftp smb smbs smtp smtps telnet tftp
# Features: IPv6 Largefile NTLM NTLM_WB SSL libz TLS-SRP UnixSockets
curl effectue SSL
vérification du certificat par défaut, à l'aide d'un "bundle"
des clés publiques Certificate Authority (CA)
(CA certs). Défaut
bundle s'appelle curl-ca-bundle.crt; vous pouvez spécifier un autre fichier
en utilisant l'option -- cacert.
si ce serveur HTTPS
utilise un certificat signé par une AC représentée par
le paquet, la vérification de certificat probablement échoué en raison d'un
problème avec le certificat (peut-être expiré ou que le nom pourrait
pas faites correspondre le nom de domaine dans L'URL).
Si vous souhaitez désactiver curl vérification du certificat, l'utilisation
l'option-k (ou --insecure
).
par exemple
curl --insecure http://........
Exécuter la commande suivante dans git bash qui fonctionne très bien pour moi
git config --global http.sslverify "false"
l'erreur est due à des fichiers de certificats de chaîne SSL corrompus ou manquants dans le répertoire de L'ICP. Vous aurez besoin de s'assurer que les fichiers CA-bundle, les étapes suivantes: Dans votre console / terminal:
mkdir /usr/src/ca-certificates && cd /usr/src/ca-certificates
entrez ce site: https://rpmfind.net/linux/rpm2html/search.php?query=ca-certificates , obtenez votre certificat ca, pour ainsi. Copier l'url du téléchargement et coller dans l'url: wget your_url_donwload_ca-ceritificated.tr / min maintenant, installez votre rpm:
rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv
redémarrez maintenant votre service: mon exemple cette commande:
sudo service2 httpd restart
résolution de Ce problème pour moi :
curl --remote-name --time-cond cacert.pem \
https://curl.haxx.se/ca/cacert.pem
j'ai eu le même problème.
C'était mon erreur
error setting ce
rtificate verify locations:
CAfile: D:/git_repo/mingw32/ssl/certs/ca-bundle.crt
CApath: none
Il fonctionne très bien pour moi
j'ai renommé le nom du répertoire d'installation de Git en git_repo ".