Ajouter des autorités de certification à l'échelle du système sur Firefox

27

Je veux ajouter des autorités de certification racine qui ne sont pas fournies avec le firefox par défaut sur Ubuntu, mais je ne sais pas comment.

J'ai essayé de les ajouter aux certificats locaux avec certutil, mais cela n'a pas fonctionné. Cela a gâché ma base de données de certificats.

$ certutil -A -d .mozilla/firefox/kek3dogy.default/ -i /usr/local/share/ca-certificates/FNMT_ACRAIZ.crt -n "Certificado Raiz FNMT" -t "TCu,Cuw,Tuw"

et alors

$ certutil -L -d .mozilla/firefox/kek3dogy.default/

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

Go Daddy Secure Certification Authority                      ,,   
VeriSign Class 3 Secure Server CA - G3                       ,,   
VeriSign Class 3 Extended Validation SSL CA                  ,,   
DigiCert High Assurance CA-3                                 ,,   
GlobalSign Domain Validation CA - G2                         ,,   
GeoTrust SSL CA                                              ,,   
StartCom Class 2 Primary Intermediate Server CA              ,,   
Google Internet Authority                                    ,,   
Certificado Raiz FNMT                                        CT,C,c
USERTrust Legacy Secure Server CA                            ,,   
HP Jetdirect 2B0EAD20                                        ,,   
Akamai Subordinate CA 3                                      ,,   
VeriSign, Inc.                                               ,,   
Thawte SGC CA                                                ,,   
VeriSign Class 3 Secure Server CA - G2                       ,,

Le certificat n'apparaîtra pas sur Firefox. J'ai essayé plusieurs fois, même en supprimant le profil, et il est apparu une fois sur l'interface Firefox, mais complètement vide.

Quoi qu'il en soit, ce n'est que pour un utilisateur, et je veux les ajouter à l'échelle du système. Existe-t-il une base de données à l'échelle du système que je peux modifier? Comment?

S'il n'y a pas de base de données à l'échelle du système que je puisse modifier, je peux compter sur un script de démarrage X (en tant que /etc/X11/Xsession.d/ceux, ou un script appelé par le système de démarrage automatique xdg sur /etc/xdg/autostart/) pour modifier le profil utilisateur au démarrage de la session, mais j'ai besoin d'une solution qui travaux. Je ne peux même plus charger de certificats sur les profils utilisateur depuis la ligne de commande maintenant!

Jorge Suárez de Lis
la source
La modification du profil par défaut est-elle une option (pour que les certificats nouvellement ajoutés soient ajoutés lorsqu'un nouveau profil est créé, mais que les anciens profils restent inchangés)?
Andrea Corbellini
Non, environ +100 profils existent déjà et les nouveaux profils sont rares.
Jorge Suárez de Lis
Vous ne pouvez pas générer un nouveau dossier de profil dans le répertoire de Firefox, puis l'ajouter à profiles.ini? Ensuite, vous pouvez y ajouter vos modifications, puis le copier et profiles.inile placer dans chaque répertoire utilisateur.
Wilf
NB Vous pouvez modifier les profils pour Firefox en exécutant firefox -p- mais vous devez d'abord fermer Firefox.
Wilf
Non, il y a + 100 utilisateurs avec leur propre profil déjà existant. Ils n'aimeront pas perdre leurs signets, leur historique, leurs mots de passe, etc.
Jorge Suárez de Lis

Réponses:

20

Le problème ici est que Firefox n'a pas d'emplacement «central» où il recherche des certificats. Il regarde simplement le profil actuel. C'est pourquoi la modification /usr/share/ca-certificatesou d'autres répertoires similaires ne fonctionnera pas avec Firefox. C'est quelque chose qui est demandé depuis des années; voir les numéros 620373 , 449498 et 454036 (et il y en a probablement beaucoup d'autres).

Il ne vous reste donc que deux types de solutions: soit modifier chaque profil, soit modifier le comportement de Firefox. Je sais que ce n'est pas ce que vous recherchez, mais il n'y a aucun moyen car Firefox ne regarde que les profils des utilisateurs.

Cela dit, la solution que je choisirais consiste à utiliser des liens physiques ou symboliques, en particulier j'irais avec des liens physiques. Cette solution est sûrement la plus simple et probablement la meilleure, même si je n'ai pas assez d'informations pour en juger.

Ce que vous avez à faire est essentiellement de supprimer chacun cert8.dbet les key3.dbfichiers de chaque profil et de les remplacer par des liens vers les "plus complets" cert8.dbet key3.db. Si vous optez pour des liens physiques, l'original cert8.dbet key3.dbne sera pas différent des nouveaux.

N'oubliez pas d'ajuster les autorisations en fonction de vos besoins. Très probablement, vous devrez le faire chmod a+rwpour que tout le monde puisse ajouter / supprimer un certificat. Si vous souhaitez que seuls certains utilisateurs puissent ajouter / supprimer des certificats, vous pouvez créer un groupe, affecter les deux bases de données à ce groupe et accorder une +wautorisation uniquement au groupe.

Andrea Corbellini
la source
Ouaip, la même chose que je pourrais trouver. C'est un peu dommage pour Firefox, imo.
gertvdijk
Mais n'écrasera-t-il pas que les certificats d'utilisateur? Les certificats utilisateur n'y sont-ils pas stockés?
Jorge Suárez de Lis
@ JorgeSuárezdeLis: eh bien, lorsque vous supprimez ces fichiers, vous perdrez les certificats. Si c'est ce que vous voulez dire par "écraser", alors oui. Vous devez d'abord fusionner toutes les bases de données en une seule, puis continuer à créer les liens physiques.
Andrea Corbellini
Mais ... je ne veux pas qu'un utilisateur ait les certificats personnels des autres! Je parle maintenant de leurs certificats, pas des autorités de certification.
Jorge Suárez de Lis
@ JorgeSuárezdeLis: désolé, je ne comprends pas: que sont les certificats personnels ?
Andrea Corbellini
15

Le moyen le plus simple consiste à importer le certificat dans un exemple de profil firefox, puis à copier le cert8.db aux utilisateurs que vous souhaitez équiper du certificat.

Importez d'abord le certificat à la main dans le profil firefox de l'échantillon-utilisateur. Copiez ensuite

/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db

dans les profils firefox des utilisateurs. C'est ça. Si vous souhaitez vous assurer que les nouveaux utilisateurs obtiennent automatiquement le certificat, copiez-le cert8.dbdans:

/etc/firefox-3.0/profile

Voici une manière alternative qui ne remplace pas les certificats existants: [fragment bash pour les systèmes linux]

certificateFile="MyCa.cert.pem"
certificateName="MyCA Name" 
for certDB in $(find  ~/.mozilla* ~/.thunderbird -name "cert8.db")
do
  certDir=$(dirname ${certDB});
  #log "mozilla certificate" "install '${certificateName}' in ${certDir}"
 certutil -A -n "${certificateName}" -t "TCu,Cuw,Tuw" -i ${certificateFile} -d ${certDir}
done

Vous pouvez trouver certutil dans le paquet libnss3-tools (debian / ubuntu).

Voir aussi: Importation programmatique du certificat CA

Source: Installer par programme le certificat dans Mozilla

TomKat
la source
+1, mais si vous votez pour cela, vous devriez peut-être aussi voter pour les réponses sur StackOverflow dont il est dérivé.
tripleee
4

Contrairement à la croyance populaire, vous pouvez demander à Firefox de regarder les certificats système à la place de son propre ensemble codé en dur.

Pour ce faire, vous voudrez utiliser un package appelé p11-kit . p11-kit fournit un remplacement direct pour libnssckbi.sola bibliothèque partagée qui contient l'ensemble de certificats codés en dur. La version p11-kit lit à la place les certificats dans le magasin de certificats système.

Puisque Firefox est livré avec sa propre version de libnssckbi.so, vous devrez le retrouver et le remplacer à la place de la version fournie dans libnss3:

sudo mv /usr/lib/firefox/libnssckbi.so /usr/lib/firefox/libnssckbi.so.bak
sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/firefox/libnssckbi.so

Ensuite, supprimez le ~/.pkirépertoire pour que Firefox actualise sa base de données de certificats (l'amenant à récupérer les certificats système) au redémarrage de Firefox. Remarque: cela supprimera tous les certificats existants dans le magasin, donc si vous en avez des personnalisés que vous avez ajoutés manuellement, vous souhaiterez peut-être sauvegarder ce dossier, puis les réimporter.

wheeler
la source
Oh, wow, c'est un peu un hack, mais +1. Vous souhaiterez peut-être ajouter une dpkg-divertétape pour éviter qu'APT écrase à nouveau le fichier lorsque vous mettez à niveau le package Firefox.
gertvdijk
@wheeler. Savez-vous si cela fonctionne toujours? Je l'ai essayé avec Ubuntu 18.04 et après avoir effectué cela, Firefox ne chargera aucun des certificats. Avoir le kit p11 0.23.9-2
Kevin Vasko
1

L'une des fonctionnalités du module complémentaire CCK Wizard Firefox est l'importation de certificats CA. J'utilise ce module complémentaire pour créer un module complémentaire personnalisé qui inclut un certificat CA d'entreprise. J'ai ensuite empaqueté le xpi personnalisé dans un .deb sur le référentiel interne à partir duquel toutes les stations de travail reçoivent des mises à jour.

Assistant CCK

EDIT: Pour empaqueter le xpi pour Ubuntu, vous devez créer un paquet qui inclut le répertoire / usr / lib / firefox-addons / extensions / [addon-name @ servername] et décompressez tout le contenu du xpi dans ce répertoire . Par exemple, si vous nommez votre addon foobarbaz et que le serveur à partir duquel vous l'avez configuré (si vous deviez activer cette fonction) est intranet.example.com, le répertoire serait [email protected]. Je n'active jamais la mise à jour automatique, mais plutôt la mise à jour du deb dans le repo.

Benjamin Long
la source
Je préfère cette méthode aux autres car elle est autonome et peut inclure une tonne d'autres personnalisations en un seul endroit. L'auteur semble cependant avoir retiré son extension d'AMO. Maintenant, il l'a sur son propre site ici , et le dernier xpi est ici .
Amit Naidu
1

Firefox fonctionne après une nouvelle installation. Si la base de données de certificats dans cert8.dbest supprimée, elle est régénérée au prochain démarrage de Firefox. Cela suggère fortement qu'il existe un stockage par défaut à l'échelle du système des certificats CA.

Le code source de Firefox montre que les certificats CA intégrés sont en fait codés en dur en firefoxexécutable. Ils résident dans security / nss / lib / ckfw / builtins / certdata.txt

Il n'y a donc aucun moyen d'installer un certificat à l'échelle du système. Attention, l'application de correctifs au code source peut poser des problèmes de droits de propriété intellectuelle.

yanychar
la source
1

J'utilise une application "User Environment Virtualization" (UEV) qui le fait pour mes utilisateurs, mais vous pouvez le faire avec des scripts de connexion dans les clients Windows tout de même. Je ne publierai pas tout le code pour trouver dynamiquement le chemin% APPDATA% \ Mozilla \ Firefox \% PROFILE%, mais lorsque vous le trouverez, vous pouvez importer les scripts à l'aide de certaines commandes de base. Je lis essentiellement le fichier Firefox profiles.ini pour déterminer le chemin vers le profil Firefox / cert8.db.

Vous pouvez envisager d'utiliser l'application certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

Vous pouvez exécuter des scripts de connexion pour les utilisateurs qui importent automatiquement les certificats de confiance à partir d'un emplacement central dans Firefox de tous les utilisateurs du système.

Voici le "noyau" de mon script vb d'importation de certificats:

If Instr(strLine,"Path=Profiles/") Then
  arrLine = Split(strLine, "/")
  strProfile = strAppData & "\Mozilla\Firefox\Profiles\" & arrLine(1)
  strCertDB = strProfile & "\cert8.db"

  'Verify the DB exists, if not move to the next entry
  If objFSO.FileExists(strCertDB) Then
    'Run certutil command on this database
    strCertCommand1 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\MYCA_Root.cer"

    strCertCommand2 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYSECONDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\SecondCA_Root.cer"

    strCertCommand3 = "\\SERVERNAME\SHARENAME$\certs\certutil\certutil.exe -A " &_
    "-n MYTHIRDCA -t ""CT,C,C"" -d " & strProfile & " -i \\SERVERNAME\SHARENAME$\certs\ThirdCA_Root.cer"

    'Run the import commands for this Firefox profile
    objShell.Run("%comspec% /c " & strCertCommand1),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand2),0,TRUE
    objShell.Run("%comspec% /c " & strCertCommand3),0,TRUE
Tony Massa
la source
1

J'ai découvert que la plupart du temps et par défaut s'il n'est pas configuré, sinon Firefox utilise des bases de données de sécurité héritées (cert8.db, key3.db et secmod.db), ce qui signifie que vous devrez utiliser une ligne de commande différente pour injecter le certificat dans la bonne base de données que Firefox utilise. (voir plus de l'homme de certutil)

donc si votre système utilise la base de données par défaut, la commande devrait se présenter comme suit: (dbm)

certutil -A -n "Description Name" -t "CT,C,C" -d dbm:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

sinon ça devrait être comme ça: (sql)

certutil -A -n "Description Name" -t "CT,C,C" -d sql:/home/<username>/.mozilla/firefox/<default folder>/ -i certificate.crt

de man certutil:

-d [prefix]directory
Specify the database directory containing the certificate and key
database files.

certutil supports two types of databases: the legacy security databases
(cert8.db, key3.db, and secmod.db) and new SQLite databases (cert9.db,
key4.db, and pkcs11.txt).

NSS recognizes the following prefixes:

·   sql: requests the newer database

·   dbm: requests the legacy database

If no prefix is specified the default type is retrieved from
NSS_DEFAUL
Asaf Magen
la source
L'utilisation de mes fichiers .pem avec la première certutilcommande a fonctionné. Je cherchais à automatiser un script de configuration mono-utilisateur et cela fait l'affaire. Vous devrez apt-get install libnss3-toolsavoir certutil.
xificurC