Je veux ajouter des autorités de certification racines 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é. Il a foiré 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 ne sera pas affiché sur Firefox. J'ai essayé cela plusieurs fois, même en supprimant le profil, et il est apparu une fois sur l'interface de Firefox, mais complètement vide.
En tout cas, ce n'est que pour un utilisateur, et je veux les ajouter à l'ensemble du système. Existe-t-il une base de données à l'échelle du système que je puisse modifier? Comment?
S'il n'y a pas de base de données à l'échelle du système que je puisse modifier, je peux me fier à un script de démarrage X (sous la forme /etc/X11/Xsession.d/
ou à un script appelé par le système xdg autostart sur /etc/xdg/autostart/
) pour modifier le profil de l'utilisateur au début de la session, mais j'ai besoin d'un solution qui fonctionne. Je ne peux même pas charger les certificats sur les profils utilisateur à partir de la ligne de commande maintenant!
Le problème ici est que Firefox n’a pas d’emplacement "central" dans lequel il recherche des certificats. Il ne fait que regarder dans le profil actuel. C'est pourquoi la modification de /usr/share/ca-certificates
ou 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 62037 , 449498 et 454036 (et il y en a probablement beaucoup d'autres).
Il ne vous reste donc que deux types de solutions: modifier chaque profil ou modifier le comportement de Firefox. Je sais que ce n'est pas ce que vous recherchez, mais il n'y a pas moyen, car Firefox ne regarde que les profils des utilisateurs.
Cela dit, la solution que je choisirais serait d’utiliser des liens physiques ou symboliques, en particulier des liens physiques. Cette solution est sûrement la plus facile et probablement la meilleure, même si je n’ai pas assez d’informations pour en juger.
Ce que vous devez faire est essentiellement de supprimer chaque fichier cert8.db
et key3.db
de chaque profil et de les remplacer par des liens vers les "plus complets" cert8.db
et key3.db
. Si vous optez pour des liens physiques, les cert8.db
et key3.db
d'origine ne pourront pas être distingués des nouveaux.
N'oubliez pas de modifier les autorisations en fonction de vos besoins. Très probablement, vous aurez besoin de chmod a+rw
pour 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, attribuer les deux bases de données à ce groupe et donner l'autorisation +w
uniquement au groupe.
Le moyen le plus simple consiste à importer le certificat dans un exemple de profil firefox, puis à copier le certificat cert8.db aux utilisateurs que vous souhaitez équiper avec le certificat.
Commencez par importer le certificat manuellement dans le profil firefox de l'exemple d'utilisateur. Puis copier
/home/${USER}/.mozilla/firefox/${randomalphanum}.default/cert8.db
dans les utilisateurs firefox-profiles. C'est tout. Si vous voulez vous assurer que les nouveaux utilisateurs obtiennent automatiquement le certificat, copiez cert8.db
dans:
/etc/firefox-3.0/profile
Voici une solution 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 de l'autorité de certification
Contrairement à la croyance populaire, vous pouvez obliger Firefox à consulter les certificats système à la place de son propre ensemble codé en dur.
Pour ce faire, vous voudrez utiliser un paquet nommé p11-kit . p11-kit fournit un remplacement instantané de libnssckbi.so
, la bibliothèque partagée contenant l'ensemble de certificats codés en dur. À la place, la version p11-kit lit les certificats à partir du magasin de certificats du système.
Étant donné que Firefox est livré avec sa propre version de libnssckbi.so
, vous devez la rechercher et la 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 répertoire ~/.pki
pour que Firefox actualise sa base de certificats (ce qui l’a fait extraire les certs système) lors du redémarrage de Firefox. Remarque: Ceci supprimera tous les certificats existants dans le magasin. Par conséquent, si vous en avez des personnalisés que vous avez ajoutés manuellement, vous voudrez peut-être sauvegarder ce dossier, puis réimportez-les.
Firefox fonctionne après une nouvelle installation. Si la base de données de certificats dans cert8.db
est 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 des certificats CA à l'échelle du système.
Le code source de Firefox montre que les certificats de l'autorité de certification intégrée sont en fait codés en dur dans l'exécutable firefox
. 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, appliquer des correctifs au code source peut entraîner des problèmes de droits de propriété intellectuelle.
L’une des fonctionnalités du module complémentaire CCK Wizard Firefox est l’importation de certificats CA. J'utilise cet add-on pour créer un add-on personnalisé incluant une certification CA de l'entreprise. Je compresse ensuite le xpi personnalisé dans un fichier .deb du référentiel interne à partir duquel toutes les stations de travail sont mises à jour.
EDIT: Afin de conditionner le xpi pour Ubuntu, vous devez créer un paquet qui inclut le répertoire/usr/lib/firefox-addons/extensions/[nom-addon @ nom_serveur] et décompressez tout le contenu du xpi dans ce répertoire. . Par exemple, si vous nommez votre module foobarbaz et que le serveur sur lequel vous souhaitez le mettre à jour (si vous activez cette fonction) est intranet.example.com, le répertoire serait alors [email protected]. Je n'active jamais la mise à jour automatique, mais mets à jour le deb dans le référentiel.
J'ai découvert que la plupart du temps et par défaut si ce n'est pas configuré autrement, 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. la base de données correcte utilisée par Firefox. (Voir plus de l'homme de certutil)
donc si votre système utilise la base de données par défaut, la commande devrait ressembler à ceci: (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
J'utilise une application "User Environment Virtualization" (UEV) qui le fait pour mes utilisateurs, mais vous pouvez le faire avec des scripts d'ouverture de session dans les clients Windows. Je ne publierai pas tout le code pour rechercher de manière dynamique le chemin% APPDATA%\Mozilla\Firefox \% PROFILE%, mais lorsque vous le trouverez, vous pouvez importer les scripts à l'aide de commandes de base. Je lis en gros le fichier Firefox profiles.ini pour déterminer le chemin d'accès au profil Firefox/cert8.db.
Vous voudrez peut-être 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 d'un emplacement central dans Firefox de tous les utilisateurs du système.
Voici le "noyau" de mon script d'importation de certificat vb:
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