Dodaj urzędy certyfikacji dla całego systemu w przeglądarce Firefox

27

Chcę dodać niektóre główne urzędy certyfikacji, które nie są dostarczane z domyślnym firefoxem na Ubuntu, ale nie wiem jak.

Próbowałem dodać je do lokalnych certyfikatów za pomocą certutil, ale to nie działało. Zepsuło to moją bazę certyfikatów.

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

i wtedy

$ 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                       ,,

Certyfikat nie pojawi się w przeglądarce Firefox. Próbowałem tego kilka razy, nawet usuwając profil, i pokazał się raz w interfejsie Firefox, ale całkowicie pusty.

W każdym razie, to jest tylko dla użytkownika i chcę dodać go do całego systemu. Czy istnieje ogólnosystemowa baza danych, którą mogę zmodyfikować? W jaki sposób?

Jeśli nie ma ogólnosystemowej bazy danych, którą mógłbym zmodyfikować, mogę polegać na skrypcie startowym X (jako takim /etc/X11/Xsession.d/lub skrypcie wywoływanym przez system autostartu xdg włączony /etc/xdg/autostart/), aby zmodyfikować profil użytkownika na początku sesji, ale potrzebuję rozwiązania, które Prace. Nie mogę teraz nawet ładować certyfikatów do profili użytkowników z wiersza poleceń!

Jorge Suárez de Lis
źródło
Czy edycja profilu domyślnego jest opcją (tak, aby nowo dodane certyfikaty były dodawane podczas tworzenia nowego profilu, ale stare profile pozostały niezmienione)?
Andrea Corbellini
Nie, istnieje już około +100 profili, a nowe profile są rzadkością.
Jorge Suárez de Lis
Nie możesz wygenerować nowego folderu profilu w katalogu Firefoksa, a następnie dodać go do profiles.ini? Następnie możesz dodać do niego zmiany, a następnie skopiować je i profiles.inido każdego katalogu użytkownika.
Wilf
Uwaga: Możesz edytować profile dla Firefoksa, uruchamiając firefox -p- ale najpierw musisz go zamknąć.
Wilf
Nie, istnieje +100 użytkowników z już istniejącym profilem. Nie będą chcieli stracić zakładek, historii, haseł itp.
Jorge Suárez de Lis

Odpowiedzi:

20

Problem polega na tym, że Firefox nie ma „centralnej” lokalizacji, w której szuka certyfikatów. Po prostu patrzy na bieżący profil. Dlatego modyfikowanie /usr/share/ca-certificateslub inne podobne katalogi nie będą działać z Firefoksem. To jest coś, o co prosiono od lat; patrz wydania 620373 , 449498 i 454036 (i prawdopodobnie jest wiele innych).

Pozostają więc tylko dwa rodzaje rozwiązań: albo zmodyfikuj każdy profil, albo zmodyfikuj zachowanie Firefoksa. Wiem, że nie tego szukasz, ale nie ma możliwości, ponieważ Firefox patrzy tylko na profile użytkowników.

Powiedziawszy to, rozwiązaniem, które wybrałbym, jest użycie twardych lub symbolicznych łączy, a konkretnie wybrałbym twarde linki. To rozwiązanie jest z pewnością najłatwiejsze i prawdopodobnie lepsze, choć nie mam wystarczających informacji, aby ocenić.

To, co musisz zrobić, to w zasadzie usunięcie każdego cert8.dbi key3.dbplików dla każdego profilu i zastąpienie ich linkami do „najbardziej kompletnego” cert8.dbi key3.db. Jeśli korzystasz z twardych linków, oryginalne cert8.dbi key3.dbbędą nie do odróżnienia od nowych.

Pamiętaj, aby dostosować uprawnienia do swoich potrzeb. Najprawdopodobniej będziesz musiał to chmod a+rwzrobić, aby każdy mógł dodać / usunąć certyfikat. Jeśli chcesz, aby tylko niektórzy użytkownicy mogli dodawać / usuwać certyfikaty, możesz utworzyć grupę, przypisać dwie bazy danych do tej grupy i +wzezwolić tylko grupie.

Andrea Corbellini
źródło
Tak, tak jak mogłem wymyślić. To trochę wstyd dla Firefoksa, imo.
gertvdijk
Ale czy nie zastąpi tego, że certyfikaty użytkownika? Czy certyfikaty użytkowników nie są tam przechowywane?
Jorge Suárez de Lis
@ JorgeSuárezdeLis: cóż, kiedy usuniesz te pliki, stracisz certyfikaty. Jeśli to masz na myśli przez „nadpisywanie”, to tak. Powinieneś najpierw połączyć wszystkie bazy danych w jedną, a następnie kontynuować tworzenie twardych dowiązań.
Andrea Corbellini
Ale ... Nie chcę, aby jeden użytkownik posiadał osobiste certyfikaty innych! Mówię teraz o ich certyfikatach, a nie o urzędach certyfikacji.
Jorge Suárez de Lis
@ JorgeSuárezdeLis: przepraszam, nie rozumiem: jakie są osobiste certyfikaty ?
Andrea Corbellini,
15

Najprostszym sposobem jest zaimportowanie certyfikatu do przykładowego profilu firefox, a następnie skopiowanie pliku cert8.db do użytkowników, których chcesz wyposażyć w certyfikat.

Najpierw zaimportuj certyfikat ręcznie do profilu firefox przykładowego użytkownika. Następnie skopiuj

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

do użytkowników profili firefox. to jest to! Jeśli chcesz się upewnić, że nowi użytkownicy otrzymują certyfikat automatycznie, skopiuj cert8.dbdo:

/etc/firefox-3.0/profile

Oto alternatywny sposób, który nie zastępuje istniejących certyfikatów: [fragment bash dla systemów 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

Możesz znaleźć certutil w pakiecie libnss3-tools (debian / ubuntu).

Zobacz także: Programowy import certyfikatu CA

Źródło: Programowo zainstaluj certyfikat w Mozilli

TomKat
źródło
+1, ale jeśli głosujesz za tym, być może powinieneś również głosować odpowiedzi na StackOverflow, z których to uzyskano.
tripleee
4

Wbrew powszechnemu przekonaniu Firefox może przeglądać certyfikaty systemowe zamiast własnego zestawu na stałe.

Aby to zrobić, będziesz chciał użyć pakietu o nazwie p11-kit . p11-kit stanowi zastępczą libnssckbi.sobibliotekę współdzieloną, która zawiera zakodowany zestaw certyfikatów. Wersja p11-kit zamiast tego odczytuje certyfikaty z systemowego magazynu certyfikatów.

Ponieważ Firefox jest dostarczany z własną wersją libnssckbi.so, musisz go wyśledzić i zastąpić zamiast wersji podanej w 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

Następnie usuń ~/.pkikatalog, aby Firefox odświeżył bazę danych certyfikatów (powodując pobranie certyfikatów systemowych) po ponownym uruchomieniu Firefoksa. Uwaga: spowoduje to usunięcie wszystkich istniejących certyfikatów w sklepie, więc jeśli masz niestandardowe, które dodałeś ręcznie, możesz wykonać kopię zapasową tego folderu, a następnie ponownie go zaimportować.

kołodziej
źródło
Och, wow, to trochę hack, ale +1. Możesz dodać dpkg-divertkrok, aby uniknąć ponownego zastąpienia pliku przez APT podczas aktualizacji pakietu Firefox.
gertvdijk
@kołodziej. Czy wiesz, czy to nadal działa? Wypróbowałem to z Ubuntu 18.04 i po wykonaniu tego Firefox nie ładuje żadnego certyfikatu. Mają p11-kit 0.23.9-2
Kevin Vasko
1

Jedną z funkcji dodatku CCK Wizard Firefox jest importowanie certyfikatów CA. Używam tego dodatku do tworzenia niestandardowego dodatku zawierającego firmowy certyfikat CA. Następnie pakuję niestandardowe xpi do .deb w wewnętrznym repozytorium, z którego wszystkie stacje robocze otrzymują aktualizacje.

Kreator CCK

EDYCJA: Aby spakować xpi dla Ubuntu, musisz utworzyć pakiet zawierający katalog / usr / lib / firefox-addons / extensions / [addon-name @ servername] i rozpakuj całą zawartość xpi do tego katalogu . Na przykład, jeśli nazwiesz swój dodatek foobarbaz, a serwerem, z którego chcesz go zaktualizować (jeśli chcesz włączyć tę funkcję), jest intranet.przyklad.com, katalog będzie miał postać [email protected]. Nigdy nie włączam automatycznej aktualizacji, ale zamiast tego aktualizuję deb w repozytorium.

Benjamin Long
źródło
Wolę tę metodę od innych, ponieważ jest ona samodzielna i może zawierać mnóstwo innych dostosowań w jednym miejscu. Wydaje się jednak, że autor usunął swoje rozszerzenie z AMO. Teraz ma go na swojej stronie tutaj , a najnowsze xpi jest tutaj .
Amit Naidu,
1

Firefox działa po czystej instalacji. Jeśli baza danych certyfikatów cert8.dbzostanie usunięta, zostanie ponownie wygenerowana przy następnym uruchomieniu Firefoksa. To zdecydowanie sugeruje, że w całym systemie istnieje domyślna pamięć masowa certyfikatów CA.

Kod źródłowy Firefoksa pokazuje, że wbudowane certyfikaty CA są w rzeczywistości zakodowane na firefoxstałe w plikach wykonywalnych. Znajdują się w security / nss / lib / ckfw / builtins / certdata.txt

Nie ma więc możliwości zainstalowania certyfikatu w całym systemie. Uwaga: łatanie kodu źródłowego może powodować problemy z prawami własności intelektualnej.

yanychar
źródło
1

Korzystam z aplikacji „User Environment Virtualization” (UEV), która robi to dla moich użytkowników, ale możesz to zrobić za pomocą skryptów logowania w klientach Windows tak samo. Nie opublikuję całego kodu, aby dynamicznie znaleźć ścieżkę% APPDATA% \ Mozilla \ Firefox \% PROFILE%, ale gdy ją znajdziesz, możesz zaimportować skrypty za pomocą podstawowych poleceń. W zasadzie czytam plik profili Firefox.ini, aby określić ścieżkę do profilu Firefox / cert8.db.

Możesz skorzystać z aplikacji certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

Możesz uruchamiać skrypty logowania dla użytkowników, którzy automatycznie importują zaufane certyfikaty z centralnej lokalizacji do Firefoksa wszystkich użytkowników w systemie.

Oto „rdzeń” skryptu vb importu certyfikatu:

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
źródło
1

Dowiedziałem się, że przez większość czasu i domyślnie, jeśli nie jest skonfigurowany, Firefox używa starszych baz danych bezpieczeństwa (cert8.db, key3.db i secmod.db), co oznacza, że ​​będziesz musiał użyć innego wiersza polecenia, aby wstrzyknąć certyfikat do poprawna baza danych, której używa Firefox. (zobacz więcej od człowieka z certutil)

więc jeśli system korzysta z domyślnej bazy danych, polecenie powinno wyglądać następująco: (dbm)

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

inaczej powinno być tak: (sql)

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

od 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
źródło
Używanie moich plików .pem z pierwszym certutilpoleceniem działało. Chciałem zautomatyzować skrypt instalacyjny dla jednego użytkownika i to załatwia sprawę. Musisz apt-get install libnss3-toolsto mieć certutil.
xificurC