Ubuntu 10.04 / CURL: Comment réparer / mettre à jour le bundle CA?

17

J'ai récemment mis à niveau notre serveur de 8.04 à 10.04, et tous les logiciels avec.

D'après ce que j'ai trouvé en ligne, il semble que la nouvelle version de CURL n'inclut pas de bundle CA et, par conséquent, ne parvient pas à vérifier que le certificat du serveur auquel vous vous connectez est signé par une autorité valide .

L'erreur réelle est:

Erreur CURL: problème de certificat SSL, vérifiez que le certificat CA est OK.
Détails: erreur: 14090086: routines SSL: SSL3_GET_SERVER_CERTIFICATE:
échec de la vérification du certificat 

Certains palettes que j'ai trouvées suggèrent de spécifier manuellement un fichier CA ou de désactiver complètement la vérification en définissant une option lorsque vous appelez CURL, mais je préférerais de loin résoudre le problème globalement, plutôt que d'avoir à modifier les appels CURL de chaque application.

Existe-t-il un moyen de résoudre le problème de l'AC de CURL à l'échelle du serveur afin que tout le code d'application existant fonctionne tel quel sans avoir besoin d'être modifié?

pseudo
la source

Réponses:

17

J'ai eu le même problème et après avoir fouillé un peu, j'ai découvert que vous pouvez télécharger un package de certificats CA prêts à être bouclés sur ubuntu directement depuis le site de développement de curl.

cd /etc/ssl/certs
sudo wget http://curl.haxx.se/ca/cacert.pem

Maintenant, curl utilise le pack le plus récent et vous êtes prêt à partir.

Paul Alexander
la source
1
après cela, j'ai dû mettre à jour avec: update-ca-certificats -f
Grain
9

Nous avons eu un problème similaire avec Ubuntu 12.04 en exécutant curl à partir de la ligne de commande pour obtenir les outils de ligne de commande aws qui étaient dans github. J'ai trouvé si j'exécutais la ligne de commande en tant que telle:

curl https://raw.github.com/timkay/aws/master/aws -o aws --cacert /etc/ssl/certs/ca-certificates.crt

ça marcherait. Mais essayer de définir la variable d'environnement CURL_CA_BUNDLE afin que je puisse éviter l'argument "cacert" ne fonctionnerait pas. En fin de compte, la mise à jour des certificats CA a semblé résoudre le problème:

sudo update-ca-certificates

En remarque, à un moment donné, j'ai mis à jour les ca-certs de curl.haxx.se qui n'ont pas résolu le problème mais qui peuvent avoir été liés. ( sudo wget http://curl.haxx.se/ca/cacert.pemcourir à partir de /etc/ssl/certs).

Bob Morley
la source
Lien 404'd pour moi. Cela fonctionne: curl.haxx.se/ca/cacert.pem
dave1010
2
Hmm. Semble louche pour récupérer un fichier contenant des certificats comme celui-ci pas sur HTTPS.
Matthew Schinckel
5

En règle générale, les logiciels qui n'ont pas d'implémentation unique et qui sont compilés avec OpenSSL feront référence au ca-bundle.crt à l'échelle du système, souvent situé dans /usr/share/ssl/certs.

L'emplacement peut être différent dans Ubuntu mais le package OpenSSL doit inclure le fichier ca-bundle.

CURL a une variété d'options pour spécifier comment il vérifie les certificats.

  • La CURL_CA_BUNDLEvariable d'environnement pour l'emplacement du fichier ca-bundle.
  • --capathvous permet de spécifier le répertoire où se trouvent les certificats CA. (Remplace CURL_CA_BUNDLE)
  • --cacert vous permet de spécifier le fichier de certificat CA.

Sur mon serveur CentOS, je peux exécuter ce qui suit pour identifier le chemin d'accès CA-bundle utilisé par CURL:

$ curl-config --ca
/usr/share/ssl/certs/ca-bundle.crt
Warner
la source
1
Open SSL est installé. J'ai un fichier "ca-certificats.crt" dans / etc / ssl / certs / qui ressemble à un tas de certificats concaténés ensemble, mais je suppose que CURL ne le voit pas? CURL a-t-il un paramètre de configuration pour le CA-Bundle?
Nick
Êtes-vous sûr que ce n'est pas le type de certificat qu'il tente de vérifier? Les technologies de certificat plus récentes telles que les certificats Extended Verification nécessitent souvent des mises à jour de CA-bundle, car les certificats racine sont relativement nouveaux. Découvrez également mon prochain montage.
Warner
curl-config ne semble pas être une commande valide sur Ubuntu. Comment définir CURL_CA_BUNDLE?
Nick
Il semble que cela fasse partie du libcurl3-openssl-devpackage basé sur une recherche rapide sur Internet. CURL_CA_BUNDLEest juste une variable d'environnement. En bash, CURL_CA_BUNDLE=/path/to/file.
Warner
D'accord, le paquet est installé, mais "curl-config --ca" produit une ligne vide. J'ai essayé de définir la variable en utilisant 'CURL_CA_BUNDLE = "/ etc / ssl / certs / ca-certificats.crt"'. Mais "curl-config --ca" produit toujours une ligne vierge par la suite.
Nick