Je rencontre des problèmes où le bundle CA fourni avec ma version de cURL est obsolète.
curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
More details here: http://curl.haxx.se/docs/sslcerts.html
La lecture de la documentation ne m'a pas aidé car je ne comprenais pas ce que je devais faire ou comment le faire. J'utilise RedHat et j'ai besoin de mettre à jour le bundle CA. Que dois-je faire pour mettre à jour mon bundle CA sur RedHat?
Pour RHEL 6 ou version ultérieure, vous devez utiliser pdate-ca-trust, comme lzap le décrit dans sa réponse ci-dessous.
--- Pour les anciennes versions de Fedora, CentOS, Redhat:
Curl utilise le bundle CA par défaut du système est stocké dans /etc/pki/tls/certs/ca-bundle.crt. Avant de le modifier, faites une copie de ce fichier afin de pouvoir restaurer les paramètres système par défaut si nécessaire. Vous pouvez simplement ajouter de nouveaux certificats d'autorité de certification à ce fichier ou remplacer l'ensemble complet.
Vous vous demandez également où obtenir les certificats? Je (et d'autres) recommande curl.haxx.se/ca. En une seule ligne:
curl https://curl.haxx.se/ca/cacert.pem -o /etc/pki/tls/certs/ca-bundle.crt
L'emplacement de Fedora Core 2 est /usr/share/ssl/certs/ca-bundle.crt
.
La façon recommandée de le faire sur les systèmes RHEL 6+ est d'utiliser l'outil update-ca-trust , qui est maintenant installé par défaut.
# cat /etc/pki/ca-trust/source/README
This directory /etc/pki/ca-trust/source/ contains CA certificates and
trust settings in the PEM file format. The trust settings found here will be
interpreted with a high priority - higher than the ones found in
/usr/share/pki/ca-trust-source/.
=============================================================================
QUICK HELP: To add a certificate in the simple PEM or DER file formats to the
list of CAs trusted on the system:
Copy it to the
/etc/pki/ca-trust/source/anchors/
subdirectory, and run the
update-ca-trust
command.
If your certificate is in the extended BEGIN TRUSTED file format,
then place it into the main source/ directory instead.
=============================================================================
Please refer to the update-ca-trust(8) manual page for additional information
Par conséquent, il vous suffit de déposer votre fichier crt dans le /etc/pki/ca-trust/source/anchors/
et pour exécuter l'outil. Travail effectué. C'est sûr à faire, vous n'avez pas besoin de faire de sauvegardes. La page de manuel complète peut être trouvée ici: https://www.mankier.com/8/update-ca-trust
RHEL fournit les certificats d'autorité de certification Mozilla dans le cadre du ca-certificates
package (installez-le avec yum
s'il n'est pas déjà installé). Pour dire à cURL de les utiliser, utilisez le --cacert
paramètre comme ça.
curl --cacert /etc/ssl/certs/ca-bundle.crt https://google.com/
Cela dépend probablement de la version de Redhat. Vous pouvez trouver le package qui met réellement à jour le fichier en procédant comme suit:
rpm -qf /etc/pki/tls/certs/ca-bundle.crt
Mon résultat montrait que openssl-0.9.8e-12.el5 doit être mis à jour.
S'il n'y a pas de certificats mis à jour dans votre distribution, vous devez mettre à jour manuellement, selon la réponse de Nada.
Depuis le commentaire de Dan Pritts, Red Hat a mis à jour les paquets de certificats pour les versions RHEL prises en charge plus souvent; vous pouvez le voir assez facilement dans le changelog du paquet. Les certificats RHEL 6 ont été mis à jour deux fois en 2013 et deux fois en 2014.
Toutes les distributions RHEL et connexes/clones/dérivés fournissent un fichier de regroupement à /etc/pki/tls/certs/ca-bundle.crt
, et le même fichier à /etc/pki/tls/cert.pem
(sur les anciennes distributions cert.pem
est un lien symbolique vers ca-bundle.crt
; sur les distributions plus récentes, les deux sont des liens symboliques vers une sortie de fichier par update-ca-trust
).
Dans RHEL 6 et les versions ultérieures, le bundle fait partie du package "ca-certificats". Dans RHEL 5 et versions antérieures, il fait partie du package "openssl".
Dans RHEL 6 avec la mise à jour https://rhn.redhat.com/errata/RHEA-2013-1596.html et tout RHEL plus récent, le système des certificats de système partagé est disponible (vous devez exécuter update-ca-trust enable
pour l'activer) et la meilleure méthode est celle donnée par lzap. Un avantage de ce système est qu'il fonctionne pour les applications basées sur NSS et GnuTLS ainsi que celles basées sur OpenSSL. Notez que vous pouvez également vous méfier d'un certificat en le plaçant dans le répertoire /etc/pki/ca-trust/source/blacklist/
.
Dans RHEL 5 et versions antérieures (et RHEL 6 si vous ne souhaitez pas utiliser le nouveau système), vous pouvez faire confiance à des autorités de certification supplémentaires en plaçant leurs fichiers de certificat au format PEM avec l'extension .pem
dans/etc/pki/tls/certs et exécutant c_rehash
(peut également nécessiter yum install /usr/bin/c_rehash
). Cela ne fonctionnera que pour les logiciels qui utilisent les magasins de confiance par défaut d'OpenSSL. C'est mieux que de modifier ou de remplacer le fichier de bundle car cela vous permet de continuer à recevoir les mises à jour officielles du fichier de bundle.
Les logiciels qui utilisent directement l'un des emplacements de fichiers de bundle (plutôt que de demander à OpenSSL d'utiliser les magasins d'approbation par défaut du système) ne respecteront pas le changement; si vous disposez d'un tel logiciel, vous êtes bloqué pour éditer le fichier de l'ensemble (ou pour améliorer le logiciel). Les logiciels qui n'utilisent pas du tout OpenSSL ne respecteront pas le certificat ajouté.
Je devais juste le faire sur une vieille boîte RHEL5. J'ai frappé le crochet 22 ... curl rejetterait le téléchargement https parce que les certificats sur la machine étaient trop vieux pour valider les certificats curl.haxx.se.
J'ai utilisé l'option --insecure de curl pour forcer le téléchargement https. (Ouais, je sais ... c'est "peu sûr".)
curl https://curl.haxx.se/ca/cacert.pem --insecure -o /etc/pki/tls/certs/ca-bundle.crt
Pour RHEL 6, j'ai pu résoudre ce problème en mettant à jour et en réinstallant le dernier package de certificats CA de Red Hat:
Sudo yum update ca-certificates
Sudo yum reinstall ca-certificates
(Dans mon cas, cela suffisait pour permettre la confiance au nouveau certificat de signature "Let’s Encrypt Authority X3".)