Agregar autoridades de certificación en todo el sistema en Firefox

27

Quiero agregar algunas CA raíz que no vienen con el firefox predeterminado en Ubuntu, pero no sé cómo.

Intenté agregarlos a los certificados locales con certutil, pero no funcionó. Se estropeó mi base de datos de certificados.

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

y entonces

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

El certificado no aparecerá en Firefox. Lo intenté varias veces, incluso eliminando el perfil, y apareció una vez en la interfaz de Firefox, pero estaba completamente vacío.

De todos modos, eso es solo para un usuario, y quiero agregarlos en todo el sistema. ¿Existe una base de datos en todo el sistema que pueda modificar? ¿Cómo?

Si no hay una base de datos que pueda modificar en todo el sistema, puedo confiar en un script de inicio X (como /etc/X11/Xsession.d/unos, o un script llamado por el sistema de /etc/xdg/autostart/inicio automático xdg ) para modificar el perfil de usuario al inicio de la sesión, pero necesito una solución que trabajos. ¡Ni siquiera puedo cargar certificados en los perfiles de usuario desde la línea de comandos ahora!

Jorge Suárez de Lis
fuente
¿Es una opción editar el perfil predeterminado (de modo que los certificados recién agregados se agregan cuando se crea un nuevo perfil, pero los perfiles antiguos no se modifican)?
Andrea Corbellini
No, ya existen aproximadamente +100 perfiles y los nuevos perfiles son algo raro.
Jorge Suárez de Lis
¿No puede generar una nueva carpeta de perfil en el directorio de Firefox y luego agregarla profiles.ini? Luego, podría agregarle los cambios y luego copiarlo profiles.inia cada directorio de usuario.
Wilf
Nota: puede editar perfiles para Firefox ejecutando firefox -p, pero primero debe cerrar Firefox.
Wilf
No, hay más de 100 usuarios con su propio perfil ya existente. No les gustaría perder sus marcadores, historial, contraseñas, etc.
Jorge Suárez de Lis

Respuestas:

20

El problema aquí es que Firefox no tiene una ubicación 'central' donde busca certificados. Simplemente se ve en el perfil actual. Es por eso que modificar /usr/share/ca-certificatesu otros directorios similares no funcionarán con Firefox. Esto es algo que se ha solicitado por años; vea los números 620373 , 449498 y 454036 (y probablemente hay muchos otros).

Por lo tanto, le quedan solo dos tipos de soluciones: modificar cada perfil o modificar el comportamiento de Firefox. Sé que esto no es lo que estás buscando, pero no hay maneras porque Firefox solo mira los perfiles de los usuarios.

Dicho esto, la solución que elegiría es usar enlaces duros o simbólicos, específicamente iría con enlaces duros. Esta solución es seguramente la más fácil y probablemente la mejor, aunque no tengo suficiente información para juzgar.

Lo que tienes que hacer es básicamente eliminar cada uno cert8.dby los key3.dbarchivos de cada perfil y reemplazarlos con enlaces a los "más completos" cert8.dby key3.db. Si vas con enlaces duros, el original cert8.dby key3.dbserá indistinguible de los nuevos.

Recuerde ajustar los permisos para satisfacer sus necesidades. Lo más probable es que lo necesite para chmod a+rwque todos puedan agregar / eliminar un certificado. Si solo desea que ciertos usuarios puedan agregar / eliminar certificados, puede crear un grupo, asignar las dos bases de datos a ese grupo y otorgar +wpermiso solo al grupo.

Andrea Corbellini
fuente
Sí, lo mismo que se me ocurrió. Es una pena para Firefox, en mi opinión.
gertvdijk
¿Pero no sobrescribirá que los certificados de usuario? ¿No están los certificados de usuario almacenados allí?
Jorge Suárez de Lis
@ JorgeSuárezdeLis: bueno, cuando elimines esos archivos perderás los certificados. Si esto es lo que quieres decir con "sobrescribir", entonces sí. Primero debe fusionar todas las bases de datos en una y luego continuar creando los enlaces duros.
Andrea Corbellini
Pero ... ¡no quiero que un usuario tenga los certificados personales de los demás! Estoy hablando ahora de sus certificados, no de las autoridades certificadoras.
Jorge Suárez de Lis
@ JorgeSuárezdeLis: lo siento, no puedo entender: ¿qué son los certificados personales ?
Andrea Corbellini
15

La forma más fácil es importar el certificado en un perfil de Firefox de muestra y luego copiar el cert8.db a los usuarios que desea equipar con el certificado.

Primero importe el certificado manualmente en el perfil de firefox del usuario de muestra. Luego copia

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

en los perfiles de firefox de los usuarios. Eso es. Si desea asegurarse de que los nuevos usuarios obtengan el certificado automáticamente, cópielo cert8.dben:

/etc/firefox-3.0/profile

Aquí hay una forma alternativa que no anula los certificados existentes: [fragmento de bash para sistemas 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

Puede encontrar certutil en el paquete libnss3-tools (debian / ubuntu).

Consulte también: Importación programática del certificado de CA

Fuente: Certificado de instalación programática en Mozilla

TomKat
fuente
+1, pero si votaste a favor, quizás también deberías votar a favor las respuestas en StackOverflow de las que se derivó.
tripleee
4

Contrariamente a la creencia popular, puede hacer que Firefox mire los certificados del sistema en lugar de su propio conjunto codificado.

Para hacer esto, querrás usar un paquete llamado p11-kit . p11-kit proporciona un reemplazo directo para libnssckbi.sola biblioteca compartida que contiene el conjunto de certificados codificados. La versión del kit p11 lee los certificados del almacén de certificados del sistema.

Como Firefox se entrega con su propia versión de libnssckbi.so, deberá rastrearlo y reemplazarlo en lugar de la versión provista en 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

Luego, elimine el ~/.pkidirectorio para que Firefox actualice su base de datos de certificados (haciendo que obtenga los certificados del sistema) al reiniciar Firefox. Nota: esto eliminará todos los certificados existentes en la tienda, por lo que si tiene los personalizados que agregó manualmente, puede hacer una copia de seguridad de esa carpeta y luego volver a importarlos.

rodador
fuente
Oh, wow, eso es un truco, pero +1. Es posible que desee agregar un dpkg-divertpaso para evitar que APT sobrescriba el archivo nuevamente cuando actualice el paquete de Firefox.
gertvdijk
@rodador. ¿Sabes si esto todavía funciona? Lo probé con Ubuntu 18.04 y después de realizar esto, Firefox no cargará ninguno de los certificados. Tener p11-kit 0.23.9-2
Kevin Vasko
1

Una de las características del complemento CCK Wizard Firefox es la importación de certificados de CA. Utilizo este complemento para crear un complemento personalizado que incluye un CA Cert de empresa. Luego empaqueto el xpi personalizado en un .deb en el repositorio interno del que todas las estaciones de trabajo obtienen actualizaciones.

CCK Wizard

EDITAR: para empaquetar el xpi para Ubuntu, debe crear un paquete que incluya el directorio / usr / lib / firefox-addons / extensions / [addon-name @ servername] y descomprima todo el contenido del xpi en este directorio . Por ejemplo, si nombra su complemento foobarbaz y el servidor desde el que configuró la actualización (si habilita esa función) es intranet.example.com, el directorio sería [email protected]. Nunca habilito la actualización automática, sino que actualizo la deb en el repositorio.

Benjamin Long
fuente
Prefiero este método sobre los demás porque es autónomo y puede incluir un montón de otras personalizaciones en un solo lugar. Sin embargo, el autor parece haber eliminado su extensión de AMO. Ahora lo tiene en su propio sitio aquí , y el último xpi está aquí .
Amit Naidu
1

Firefox funciona después de una instalación limpia. Si cert8.dbse elimina la base de datos de certificados , se regenera en el próximo inicio de Firefox. Esto sugiere fuertemente que existe un almacenamiento predeterminado de todo el sistema de certificados de CA.

El código fuente de Firefox muestra que los certificados de CA incorporados están de hecho codificados en firefoxejecutables. Residen en security / nss / lib / ckfw / builtins / certdata.txt

Por lo tanto, no hay forma de instalar un certificado en todo el sistema. Tenga en cuenta que parchear el código fuente puede generar problemas con los derechos de propiedad intelectual.

yanychar
fuente
1

Estoy usando una aplicación "User Environment Virtualization" (UEV) que hace esto para mis usuarios, pero puede hacerlo con los scripts de inicio de sesión en los clientes de Windows de la misma manera. No publicaré todo el código para encontrar dinámicamente la ruta% APPDATA% \ Mozilla \ Firefox \% PROFILE%, pero cuando la encuentre, puede importar los scripts usando algunos comandos básicos. Básicamente estoy leyendo el archivo Firefox profiles.ini para determinar la ruta al perfil de Firefox / cert8.db.

Es posible que desee ver el uso de la aplicación certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

Puede ejecutar scripts de inicio de sesión para los usuarios que importan automáticamente los certificados de confianza desde una ubicación central en Firefox de todos los usuarios del sistema.

Aquí está el "núcleo" de mi script vb de importación de certificados:

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
fuente
1

Descubrí que la mayoría de las veces y de forma predeterminada si no está configurado, Firefox usa bases de datos de seguridad heredadas (cert8.db, key3.db y secmod.db), lo que significa que necesitará usar una línea de comando diferente para inyectar el certificado en la base de datos correcta que usa Firefox. (ver más del hombre de certutil)

así que si su sistema usa la base de datos predeterminada, el comando debería ser así: (dbm)

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

de lo contrario debería ser así: (sql)

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

del hombre 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
fuente
Usar mis archivos .pem con el primer certutilcomando funcionó. Estaba buscando automatizar un script de configuración para un solo usuario y esto funciona. Necesitarás apt-get install libnss3-toolstener certutil.
xificurC