Aggiungi le autorità di certificazione a livello di sistema su Firefox


27

Voglio aggiungere alcune CA root che non vengono fornite con Firefox predefinito su Ubuntu, ma non so come.

Ho provato ad aggiungerli ai certificati locali con certutil, ma non ha funzionato. Ha incasinato il mio database di certificati.

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

e poi

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

Il certificato non verrà visualizzato su Firefox. L'ho provato diverse volte, anche eliminando il profilo, e si è presentato una volta sull'interfaccia di Firefox, ma completamente vuoto.

Ad ogni modo, è solo per un utente e voglio aggiungerli a livello di sistema. Esiste un database a livello di sistema che posso modificare? Come?

Se non è possibile modificare un database a livello di sistema, posso fare affidamento su uno script X start (come /etc/X11/Xsession.d/quelli o su uno script chiamato dal sistema di avvio automatico xdg /etc/xdg/autostart/) per modificare il profilo utente all'avvio della sessione, ma ho bisogno di una soluzione che lavori. Non riesco nemmeno a caricare certificati sui profili utente dalla riga di comando ora!


La modifica del profilo predefinito è un'opzione (in modo che i nuovi certificati aggiunti vengano aggiunti quando viene creato un nuovo profilo, ma i vecchi profili rimangono invariati)?
Andrea Corbellini,

No, esistono già circa +100 profili e i nuovi profili sono una cosa rara.
Jorge Suárez de Lis,

Non riesci a generare una nuova cartella di profili nella directory di Firefox e poi aggiungerla a profiles.ini? Quindi è possibile aggiungere le modifiche ad esso, quindi copiarlo e profiles.iniin ciascuna directory utente.
Wilf,

NB È possibile modificare i profili per Firefox eseguendo firefox -p, ma prima è necessario chiudere Firefox.
Wilf,

No, ci sono +100 utenti con il loro profilo già esistente. Non vorranno perdere i loro segnalibri, la cronologia, le password, ecc.
Jorge Suárez de Lis,

Risposte:


20

Il problema qui è che Firefox non ha una posizione "centrale" dove cerca i certificati. Guarda solo nel profilo corrente. Ecco perché la modifica /usr/share/ca-certificateso altre directory simili non funzionano con Firefox. Questo è qualcosa che è stato richiesto per anni; vedi i numeri 620373 , 449498 e 454036 (e probabilmente ce ne sono molti altri).

Quindi ti rimangono solo due tipi di soluzioni: modificare ciascun profilo o modificare il comportamento di Firefox. So che questo non è quello che stai cercando, ma non ci sono modi perché Firefox guarda solo i profili degli utenti.

Detto questo, la soluzione che sceglierei è usare collegamenti duri o simbolici, in particolare andrei con collegamenti fissi. Questa soluzione è sicuramente la più semplice e probabilmente la migliore, anche se non ho abbastanza informazioni per giudicare.

Quello che devi fare è sostanzialmente rimuovere ciascuno cert8.dbe i key3.dbfile per ciascun profilo e sostituirli con collegamenti ai "più completi" cert8.dbe key3.db. Se vai con hardlink, l'originale cert8.dbe key3.dbsarà indistinguibile da quelli nuovi.

Ricorda di adattare le autorizzazioni in base alle tue esigenze. Molto probabilmente, dovrai farlo in chmod a+rwmodo che tutti possano aggiungere / rimuovere un certificato. Se si desidera che solo determinati utenti siano in grado di aggiungere / rimuovere certificati, è possibile creare un gruppo, assegnare i due database a quel gruppo e concedere l' +wautorizzazione solo al gruppo.


Sì, proprio come ho potuto inventarmi. È un po 'un peccato per Firefox, imo.
gertvdijk,

Ma non sovrascriverà che l'utente certifica? I certificati utente non sono memorizzati lì?
Jorge Suárez de Lis,

@ JorgeSuárezdeLis: bene, quando elimini quei file perderai i certificati. Se questo è ciò che intendi con "sovrascrittura", allora sì. È innanzitutto necessario unire tutti i database in uno e quindi procedere alla creazione dei collegamenti.
Andrea Corbellini,

Ma ... Non voglio che un utente abbia i certificati personali degli altri! Sto parlando ora dei loro certificati, non delle autorità di certificazione.
Jorge Suárez de Lis,

@ JorgeSuárezdeLis: scusa, non capisco: cosa sono i certificati personali ?
Andrea Corbellini,

15

Il modo più semplice è importare il certificato in un profilo firefox di esempio e quindi copiare cert8.db negli utenti che si desidera dotare del certificato.

Innanzitutto importare il certificato manualmente nel profilo firefox dell'utente-campione. Quindi copia

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

nei profili firefox degli utenti. Questo è tutto. Se vuoi assicurarti che i nuovi utenti ottengano automaticamente il certificato, copia cert8.dbsu:

/etc/firefox-3.0/profile

Ecco un modo alternativo che non sovrascrive i certificati esistenti: [bash fragment for linux systems]

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

Puoi trovare certutil nel pacchetto libnss3-tools (debian / ubuntu).

Vedi anche: Importazione programmatica del certificato CA.

Fonte: installare a livello di codice il certificato in Mozilla


+1, ma se si vota questo, si dovrebbe forse anche votare le risposte su StackOverflow da cui questo è derivato.
tripleee,

4

Contrariamente alla credenza popolare, è possibile far sì che Firefox guardi i certificati di sistema invece del proprio set hardcoded.

Per fare ciò, vorrai usare un pacchetto chiamato p11-kit . p11-kit fornisce una sostituzione drop-in per libnssckbi.sola libreria condivisa che contiene il set di certificati hardcoded. La versione del kit p11 invece legge i certificati dall'archivio certificati di sistema.

Poiché Firefox viene fornito con la propria versione di libnssckbi.so, è necessario rintracciarlo e sostituirlo invece della versione fornita in 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

Quindi, elimina la ~/.pkidirectory per far sì che Firefox aggiorni il suo database dei certificati (facendogli recuperare i certificati di sistema) al riavvio di Firefox. Nota: questo eliminerà tutti i certificati esistenti nel negozio, quindi se ne hai di personalizzati aggiunti manualmente, potresti voler eseguire il backup di quella cartella e quindi reimportarli.


Oh, wow, è un po 'un trucco, ma +1. È possibile che si desideri aggiungere un dpkg-divertpassaggio per evitare che APT sovrascriva nuovamente il file quando si aggiorna il pacchetto Firefox.
gertvdijk,

@wheeler. Sai se funziona ancora? L'ho provato con Ubuntu 18.04 e dopo aver eseguito questo Firefox non caricherà affatto nessuna delle certs. Hanno p11-kit 0.23.9-2
Kevin Vasko il

1

Una delle funzionalità del componente aggiuntivo CCK Wizard Firefox è l'importazione di certificati CA. Uso questo componente aggiuntivo per creare un componente aggiuntivo personalizzato che include una società CA Cert. Quindi pacchetto il xpi personalizzato in un .deb sul repository interno da cui tutte le workstation ottengono aggiornamenti.

Procedura guidata CCK

EDIT: Per impacchettare l'xpi per Ubuntu, è necessario creare un pacchetto che includa la directory / usr / lib / firefox-addons / extensions / [nome-addon @ nomeserver] e decomprimere l'intero contenuto dell'xpi in questa directory . Ad esempio, se si denomina il componente aggiuntivo foobarbaz e il server da cui è impostato l'aggiornamento (se si dovesse abilitare quella funzione) è intranet.example.com, la directory sarebbe foobarbaz@intranet.example.com. Non abilito mai l'aggiornamento automatico, ma aggiorno invece il deb nel repository.


Preferisco questo metodo rispetto agli altri perché è autonomo e può includere un sacco di altre personalizzazioni in un unico posto. L'autore sembra aver rimosso la sua estensione da AMO però. Ora ce l' ha sul suo sito qui e l'ultimo xpi è qui .
Amit Naidu,

1

Firefox funziona dopo un'installazione pulita. Se il database dei certificati in cert8.dbviene eliminato, viene rigenerato al successivo avvio di Firefox. Ciò suggerisce fortemente che esiste un archivio predefinito a livello di sistema di certificati CA.

Il codice sorgente di Firefox mostra che i certificati CA incorporati sono in realtà codificati in firefoxfile eseguibili. Risiedono in security / nss / lib / ckfw / builtins / certdata.txt

Quindi non è possibile installare un certificato a livello di sistema. Fai attenzione che l'applicazione di patch al codice sorgente potrebbe far sorgere problemi con i diritti di proprietà intellettuale.


1

Sto usando un'applicazione "User Environment Virtualization" (UEV) che lo fa per i miei utenti, ma puoi farlo con gli script di accesso nei client Windows allo stesso modo. Non pubblicherò tutto il codice per trovare dinamicamente il percorso% APPDATA% \ Mozilla \ Firefox \% PROFILE%, ma quando lo trovi puoi importare gli script usando alcuni comandi di base. In pratica sto leggendo il file Firefox profiles.ini per determinare il percorso del profilo / cert8.db di Firefox.

Potresti voler guardare usando l'applicazione certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

È possibile eseguire script di accesso per gli utenti che importano automaticamente i certificati attendibili da una posizione centrale nel Firefox di tutti gli utenti del sistema.

Ecco il "core" del mio script di importazione vb certificato:

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

1

Ho scoperto che la maggior parte delle volte e per impostazione predefinita se non configurato altrimenti Firefox utilizza database di sicurezza legacy (cert8.db, key3.db e secmod.db), ciò significa che sarà necessario utilizzare una riga di comando diversa per iniettare il certificato in il database corretto utilizzato da Firefox. (vedi di più dall'uomo di Certutil)

quindi se il tuo sistema utilizza la base di dati predefinita il comando dovrebbe andare così: (dbm)

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

altrimenti dovrebbe essere così: (sql)

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

da 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

Utilizzando i miei file .pem con il primo certutilcomando ha funzionato. Stavo cercando di automatizzare uno script di installazione per utente singolo e questo fa il trucco. Dovrai apt-get install libnss3-toolsavere certutil.
XificurC,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.