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

7

Après avoir créé une nouvelle autorité de certification , importé manuellement la chaîne de l'autorité 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é la chaîne de certification de l'autorité de certification (au format pem et crt) sur nos serveurs Ubuntu dans les répertoires suivants:

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

Une fois que cela a été fait, les applications sur les machines Ubuntu telles que wget / curl / java ne font toujours pas confiance aux connexions qui utilisent les nouveaux certificats. Selon un autre post , nous devons exécuter dpkg-reconfigure -f noninteractive ca-certificatesou update-ca-certificatessur chaque machine qui a le 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?

MrDrMcCoy
la source

Réponses:

6

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 /etc/ssl/certs/*.pemfichiers doivent avoir été liés symboliquement 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, alors vous devriez recommencer 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 soit également tenu à jour 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.

Concasseur
la source
1
Je pense que la majeure partie de ma confusion était liée au fait que crt et pem soient du même format. J'avais suivi des instructions venues d'ailleurs qui semblaient vouloir "se convertir" entre les deux, mais qui ne m'ont en fait donné qu'une chaîne partielle dans le même format. Naturellement, le cert partiel n'a pas fait l'affaire. Renommer simplement le fichier pem de la chaîne pour mettre fin à .crt, en le plaçant sous /usr/local/share/ca-certificates, et le fonctionnement a update-ca-certificates --freshfait l'affaire.
MrDrMcCoy
2

Des outils tels update-ca-certificatesque garantir 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'inscris une étape pour ajouter le lien symbolique après la copie du certificat. J'ai trouvé cela plus simple à définir que d'exécuter un programme lors de l'installation du certificat.

Java utilise un cacertsfichier situé dans le répertoire d'installation. Vous devrez installer un nouveau cacertsfichier ou importer le certificat dans le cacertsfichier. Vous pouvez également installer un jssecacertsfichier à côté du cacertsfichier 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 cacertssont régulièrement mis à jour au fur et à mesure que les différentes 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.

BillThor
la source