web-dev-qa-db-fra.com

Comment faire en sorte qu'Ubuntu fasse confiance à un nouveau certificat racine de manière non interactive?

Après avoir créé une nouvelle autorité de certification , importé manuellement la chaîne d'autorités de certification dans un navigateur et vérifié que les navigateurs peuvent faire confiance aux nouveaux certificats signés avec l'intermédiaire, nous avons copié le Chaîne de certificats CA (format pem et crt) vers nos serveurs Ubuntu dans les répertoires suivants:

  • / etc/ssl/certificats /
  • / usr/local/share/ca-certificates /

Une fois cela fait, les applications sur les machines Ubuntu telles que wget/curl/Java n’approuvent toujours pas les connexions qui utilisent les nouveaux certificats. Selon une autre publication , nous devons exécuter dpkg-reconfigure -f noninteractive ca-certificates ou update-ca-certificates sur chaque machine disposant du cert. Non seulement ces commandes n’ont pas fonctionné, mais il ne serait pas pratique de les exécuter sur des milliers de serveurs. Nous utilisons CFEngine pour la gestion de la configuration, mais il ne semble pas avoir une installation pour ce genre de choses, autant que je sache.

Existe-t-il un moyen de créer un script pour Ubuntu afin de mettre à jour de manière non interactive les certificats d'autorité de certification approuvés de manière à fonctionner avec des milliers de machines?

7
MrDrMcCoy

Je suis d'accord avec tout ce que BillThor a mentionné, mais j'ajouterai qu'il peut être nécessaire de reconstruire complètement le magasin de certificats, car parfois, il semble que update-ca-certificates s'efforce trop d'être paresseux et ne met pas à jour les choses qu'il devrait faire. .

rm -f /usr/local/share/ca-certificates/certificate.crt
# --fresh is needed to remove symlinks to no-longer-present certificates
update-ca-certificates --fresh

Notez également que, une fois que update-ca-certificates est terminé, les fichiers /etc/ssl/certs/*.pem doivent être liés par un lien symbolique avec leurs certificats respectifs dans /usr/local/share/ca-certificates/ ou /usr/share/ca-certificates/. Comme BillThor l'a mentionné, il y aura également un lien symbolique vers un fichier avec l'empreinte digitale comme nom - ce sera similaire à 349f2832.0.

Un ls -l peut le confirmer:

--snip--
lrwxrwxrwx 1 root root     72 Feb  6  2014 Security_Communication_EV_RootCA1.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_EV_RootCA1.crt
lrwxrwxrwx 1 root root     69 Mar 25  2014 Security_Communication_RootCA2.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt
lrwxrwxrwx 1 root root     69 Feb  6  2014 Security_Communication_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_Root_CA.crt
lrwxrwxrwx 1 root root     61 Feb  6  2014 Sonera_Class_1_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Sonera_Class_1_Root_CA.crt
--snip--

Notez également que * .crt et * .pem sont le même fichier . Cela signifie que le fichier .crt d'origine mis en place doit être au format .pem.

Un fichier au format .pem ressemble à ceci:

-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
--snip--
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
O+7ETPTsJ3xCwnR8gooJybQDJbw=
-----END CERTIFICATE-----

Vous pouvez tester l’installation de votre certificat en exécutant openssl sur le cert: openssl x509 -in /etc/ssl/certs/[certname].pem -noout -text et openssl x509 -in /usr/local/share/ca-certificates/[certname].pem -noout -text (bien sûr en remplaçant [certname]).

Vous devriez voir des informations détaillées sur votre certificat, et les deux doivent correspondre (car avec un lien symbolique, ils devraient être le même fichier).

Si elles ne correspondent pas, vous devriez alors réexécuter update-ca-certificates --fresh

S'ils ne fournissent pas d'informations utiles du tout, vous devez vérifier votre certificat et vous assurer qu'il est au format PEM valide.

EDIT: BillThor a mentionné que cela ne fonctionnerait pas pour Java, mais il semble qu'au moins sur Debian, le magasin de certificats de Java est également maintenu jusqu'à date par l'outil update-ca-certificates. Je ne suis pas au courant d'autres choses sur Linux qui utilisent un magasin de certificats alternatif, à part peut-être Wine qui exécute une application Adobe Air.

6
stonecrusher

Des outils tels que update-ca-certificates garantissent que le certificat est lié à un lien symbolique correspondant à la valeur de hachage du certificat. Lors du déploiement de certificats à l'aide de cfengine, j'inclus une étape permettant d'ajouter le lien symbolique une fois le certificat copié. J'ai trouvé cela plus simple à définir que d'exécuter un programme lors de l'installation du certificat.

Java utilise un fichier cacerts situé dans le répertoire d'installation. Vous devrez installer un nouveau fichier cacerts ou importer le certificat dans le fichier cacerts. Vous pouvez également installer un fichier jssecacerts à côté du fichier cacerts existant. Avec l'un ou l'autre fichier, vous devez vous assurer qu'il contient tous les certificats que vous souhaitez approuver. Cela peut être un sous-ensemble de l'ensemble par défaut. L'option la plus simple et la plus stable consiste à installer le fichier dans la version Java par défaut. Les certificats dans cacerts sont mis à jour périodiquement au fur et à mesure que diverses autorités de certification mettent à jour leurs certificats de confiance publique. Vous devrez donc conserver ce fichier au fil du temps.

Selon le navigateur que vous utilisez, vous devrez peut-être installer le certificat en tant que certificat de confiance dans le fichier de clés du navigateur, lequel ne peut pas être l'un des magasins déjà abordés.

1
BillThor