7 votes

Comment corriger l'erreur de curl "error setting certificate verify locations" (erreur dans la définition des emplacements de vérification des certificats) ?

Je suis développeur web et j'ai un MacBook4,1 avec OS X 10.5.8. Des choses importantes comme GitHub, homebrew, ruby et Python ne fonctionnent pas correctement, parce que curl ne fonctionne pas. Il semble que les certificats SSL soient périmés.

J'obtiens cette erreur à chaque fois :

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

Que puis-je faire pour résoudre ce problème ?

12voto

danielkza Points 786

Le problème vient du fait qu'OS X ne conserve pas ses certificats d'autorité de certification dans le système de fichiers ; ils se trouvent dans le trousseau de clés "System Roots". Vous pouvez les voir avec l'application Keychain Access (qui se trouve dans votre dossier Applications/Utilities).

Pour les outils qui ne savent pas dialoguer avec le trousseau (comme curl), vous pouvez exporter ces certificats dans un dossier de votre choix, par exemple /etc/ssl/certs pour être cohérent avec la plupart des distros linux. Vous pouvez soit les glisser-déposer du trousseau d'accès dans une fenêtre du Finder, soit les sélectionner et choisir "Exporter les éléments..." dans le menu Fichier. Avec le glisser-déposer, il semble que l'on utilise toujours le fichier binaire .cer alors que la plupart des outils CLI veulent du PEM encodé en base64 (en utilisant généralement l'option .crt ). Vous pouvez exporter au format pem à partir de l'accès au trousseau, mais il ne semble exporter qu'un seul certificat à la fois, même si vous en avez sélectionné plusieurs. Pour contourner ce problème, j'ai écrit un script bash script pour convertir par lots les fichiers .cer en fichiers .crt au format PEM :

#!/bin/bash
#Convert all .cer files in this folder into PEM format .crt files
shopt -s nullglob
for f in *.cer
do
        openssl x509 -inform der -in "${f}" -outform pem -out "${f%.*}.crt"
        rm "$f"
done
chmod 444 *crt

Pour l'utiliser, créez un dossier, placez-y ce script (je l'ai appelé cerconv.sh ), faites-y glisser tous vos certificats d'autorité de certification racine, ouvrez un terminal dans ce dossier et exécutez simplement bash cerconv.sh .

Pour éviter que des personnes malveillantes n'échangent vos certificats d'autorité de certification, j'ai ajouté une ligne à chmod ils sont tous en lecture seule.

Tout cela est peut-être inutile - je n'ai aucun problème avec git(hub), homebrew, curl etc. sans avoir à le faire, et ce depuis des années - mais au moins vous savez maintenant comment obtenir les certificats.

Cette approche est préférable à l'utilisation de -k en curl parce que vous ne compromettez pas votre sécurité.

Mise à jour : Je viens de découvrir le security sous OS X. Voici une commande qui l'utilise pour exporter tous les certificats du trousseau de clés de votre système dans un seul fichier .pem qui devrait être utilisable avec curl :

security export -p -t certs -k `security list-keychains -d system|cut -d '"' -f 2` -o certs/certs.pem

3voto

AllInOne Points 1543

Cette erreur n'indique pas explicitement que les certificats sont périmés, n'est-ce pas ? Il me semble qu'elle se plaint que les certificats ne sont pas là où ils sont censés être (ou potentiellement qu'ils ne peuvent pas être lus).

J'ai trouvé cela sur Google :

http://curl.haxx.se/mail/curlphp-2005-11/0038.html

En résumé, l'auteur de l'article suggère d'utiliser l'option -k avec curl pour supprimer cette erreur (ce qui est évidemment moins sûr) ou de s'assurer que le processus qui appelle curl dispose d'un accès exécutif à tous les répertoires du chemin d'accès aux certificats.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X