web-dev-qa-db-fra.com

Comment gérer les certificats utilisant cURL lorsque j'essaie d'accéder à une URL HTTPS?

Je reçois l'erreur suivante en utilisant curl:

 curl: (77) emplacements de vérification de certificat de configuration d'erreur: 
 CAfile: /etc/ssl/certs/ca-certificates.crt
 CApath: aucun 

Comment définir ce certificat pour vérifier les emplacements? Merci.

170
moorecats

Cette erreur est liée à un paquet manquant : ca-certificates. Installez-le.

Sous Ubuntu Linux (et une distribution similaire):

# apt-get install ca-certificates

Dans CygWin via Apt-Cyg

# apt-cyg install ca-certificates

Dans Arch Linux (Raspberry Pi)

# pacman -S ca-certificates

La documentation dit:

Ce package comprend des fichiers PEM de certificats d'autorité de certification pour permettre aux applications basées sur SSL de vérifier l'authenticité des connexions SSL.

Comme vu sur: Debian - Détails du paquet ca-certificates in squeeze

68
Rubens Mariuzzo

J'avais aussi la dernière version de ca-certificates installée mais je reçois toujours l'erreur:

curl: (77) error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

Le problème était que curl s'attendait à ce que le certificat se trouve sur le chemin /etc/pki/tls/certs/ca-bundle.crt mais ne le trouve pas car il se trouvait sur le chemin /etc/ssl/certs/ca-certificates.crt.

Copier mon certificat vers la destination attendue en exécutant

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

a travaillé pour moi. Vous devrez 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 attendu par curl, c'est-à-dire remplacez /etc/pki/tls/certs/ca-bundle.crt par le chemin suivant "CAfile:" dans votre message d'erreur.

144
Scott Emmons

Mettez ceci dans votre .bashrc

# fix CURL certificates path
export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt

(voir le commentaire de Robert)

79
Yauhen Yakimovich

Créez un fichier ~/.curlrc avec le contenu suivant

cacert=/etc/ssl/certs/ca-certificates.crt
28
prabeesh

Le moyen le plus rapide de contourner l'erreur consiste à ajouter l'option -k quelque part dans votre requête curl. Cette option "autorise les connexions à des citations SSL sans certs". (de curl --help)

Sachez que cela peut signifier que vous ne communiquez pas avec le système d'extrémité que vous pensez être, car ils présentent un certificat non signé par une autorité de certification de 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 suivante:

curl: (77) error setting certificate verify locations:
  CAfile: /usr/ssl/certs/ca-bundle.crt
  CApath: none

J'ai ajouté sur -k:

curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k

et pas de message d'erreur. En bonus, j'ai maintenant apt-cyg installé. Et ca-certificats.

18
10gistic

@roens est correct. Ceci 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 de contournement consiste à utiliser le curl système par défaut et à éviter de jouer avec la variable Anaconda PATH préfixée. Vous pouvez soit

  1. Renommez le binaire Anaconda curl :)
    mv /path/to/anaconda/bin/curl /path/to/anaconda/bin/curl_anaconda

  2. OU supprime Anaconda curl
    conda remove curl

$ which curl /usr/bin/curl

[0] Anaconda Ubuntu curl problème Github https://github.com/conda/conda-recipes/issues/352

13
Harsha Manjunath

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.
12

Cela a fonctionné pour moi

Sudo apt-get install ca-certificates

puis allez dans le dossier des certificats à

Sudo cd /etc/ssl/certs

puis vous copiez le fichier ca-certificates.crt 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: en créer un et modifier les autorisations à l'aide de chmod 777 -R folderNAME

6
Kwame Yeboah

Une autre alternative pour résoudre ce problème consiste à désactiver la validation du certificat:

echo insecure >> ~/.curlrc
6
Pablo R. Mier

Pour PHP code fonctionnant sous XAMPP sous Windows, j'ai découvert que je devais modifier le fichier php.ini pour inclure le texte ci-dessous.

[curl]
; A default value for the CURLOPT_CAINFO option. This is required to be an
; absolute path.
curl.cainfo = curl-ca-bundle.crt

puis copier dans un fichier https://curl.haxx.se/ca/cacert.pem et renommer en curl-ca-bundle.crt et le placer sous le chemin\xampp (je ne pouvais pas faire curl.capath au travail). J'ai également constaté que CAbundle sur le site cURL n'était pas suffisant pour le site distant auquel je me connectais. J'utilise donc celui qui est répertorié avec une version Windows précompilée de curl 7.47.1 à l'adresse http: // winampplugins .co.uk/curl /

5
LJT

Il semble que votre boucle pointe vers un fichier non existant avec des certificats de certification ou similaires.

Pour la référence principale sur les certificats CA avec curl, voir: https://curl.haxx.se/docs/sslcerts.html

4
Daniel Stenberg

curl exécute la vérification de certificat SSL par défaut, à l'aide d'un "ensemble" de Certificate Authority (CA) clés publiques (certificats CA). Le paquet par défaut est nommé 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 autorité de certification représentée dans l'ensemble, la vérification du certificat a probablement échoué en raison d'un problème lié au certificat (il peut expirer ou le nom peut ne pas correspondre au nom de domaine indiqué dans l'URL ).

Si vous souhaitez désactiver la vérification du certificat par curl, utilisez l'option -k (ou --insecure).

par exemple

curl --insecure http://........
4
meda

Il suffit de créer les dossiers manquants dans votre système.

/ etc/pki/tls/certs /

et créez le fichier en utilisant la commande suivante,

Sudo apt-get install ca-certificate

copiez et collez ensuite le certificat dans le dossier de destination indiqué 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.

Sudo cp /etc/ssl/certs/ca-certificates.crt /etc/pki/tls/certs/ca-bundle.crt

Fixé.

2
Manu R S

Vérifier que which curl soit exécuté est également important.

Un utilisateur sur une machine partagée que je maintiens avait cette erreur. Mais la cause s’est avérée être due au fait qu’ils avaient installé Anaconda ( http://continuum.io ). Ce faisant, placez le chemin binaire d’Anaconda avant le $PATH standard, qui vient avec son propre binaire curl, qui avait du mal à trouver les certificats par défaut que était installé sur cette machine Ubuntu.

2
roens

J'ai eu exactement le même problème. En fait, mon fichier /etc/ssl/certs/ca-certificates.crt était mal formé. La dernière entrée a montré 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 était en mesure de gérer le fichier de certificats.

C'était très ennuyant de le savoir puisque ma commande update-ca-certificates ne m'avait donné aucun avertissement.

Ceci peut ou peut ne pas être un problème spécifique à la version de curl, alors voici ma version, juste pour être complet:

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 
2
ShrimpPhaser

Si vous utilisez homebrew sur macOS ou linuxbrew sous linux, essayez de réinstaller les fichiers openssl et curl en procédant comme suit sur cette page .

Ce message d'erreur indique que curl n'est pas en mesure d'établir une connexion sécurisée à l'aide de openssl. Une réinstallation de openssl devrait résoudre le problème. Pour utiliser temporairement une connexion non sécurisée permettant à curl et à git de télécharger les fichiers nécessaires, exécutez:

echo insecure >> ~/.curlrc
git config --global http.sslVerify false

Ensuite, installez ou réinstallez openssl et curl:

HOMEBREW_CURLRC=1 brew reinstall openssl curl

Enfin, annulez les modifications de sécurité pour que curl et git utilisent à nouveau les connexions sécurisées:

sed -i '/^insecure$/d' ~/.curlrc
git config --global http.sslVerify true

Vous devrez peut-être démarrer une nouvelle session Shell pour vérifier le résultat avec

curl -v https://github.com # or any other https urls.

Si le résultat suivant apparaît en sortie, le problème doit être résolu!

* successfully set certificate verify locations:
*   CAfile: /usr/local/etc/openssl/cert.pem
    CApath: /usr/local/etc/openssl/certs

Références:

1
Itachi

Exécutez la commande suivante dans git bash qui fonctionne bien pour moi

git config --global http.sslverify "false"
0
J4cK

Cela a corrigé pour moi:

curl --remote-name --time-cond cacert.pem \
    https://curl.haxx.se/ca/cacert.pem
0
Reza Farshi

J'ai eu ce problème et il s'est avéré que ma version de CURL ne pouvait pas analyser les certificats encodés en DER (et ne prêtait pas attention à l'option --cert-type non plus). Lorsque j'ai converti le certificat au format PEM, cela a fonctionné.

0
Joshua Davies

J'ai trouvé ce correctif facile et sécurisé. Cela implique simplement de changer le chemin de deux valeurs dans le fichier php.ini. Suivez les instructions ici: https://ourcodeworld.com/articles/read/196/xampp-wampp-php-ssl-certificate-error-unable-to-get-local-issuer-certificate

0
Will Ward

Ci-dessous, décrivez les étapes pour résoudre les problèmes.
1. Découvrez que le fichier existe sur l’URL de définition.
2. Sinon, téléchargez le fichier à partir de l'URL. https://curl.haxx.se/ca/cacert.pem
3. Copiez et importez le fichier dans le chemin défini sur le fichier php.ini.
4. Redémarrez le service Apache.

0
tapas talukder

L'erreur est due à des fichiers de certificat de chaîne SSL corrompus ou manquants dans le répertoire PKI. Assurez-vous que les fichiers sont bien regroupés en procédant comme suit: 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 le SO. Copiez l’URL du téléchargement et collez-le dans l’URL: wget your_url_donwload_ca-ceritificated.rpm maintenant, installez votre rpm:

rpm2cpio your_url_donwload_ca-ceritificated.rpm | cpio -idmv

maintenant redémarrez votre service: mon exemple cette commande:

Sudo service2 httpd restart
0
Santos L. Victor