Adicionar autoridades de certificação em todo o sistema no Firefox

27

Quero adicionar algumas CAs raiz que não acompanham o Firefox padrão no Ubuntu, mas não sei como.

Tentei adicioná-los aos certificados locais com certutil, mas não funcionou. Ele bagunçou meu banco de dados 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"

e depois

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

O certificado não será exibido no Firefox. Eu tentei isso várias vezes, até excluindo o perfil, e ele apareceu uma vez na interface do Firefox, mas completamente vazio.

Enfim, isso é apenas para um usuário, e eu quero adicioná-los em todo o sistema. Existe um banco de dados em todo o sistema que eu possa modificar? Quão?

Se não houver um banco de dados em todo o sistema que eu possa modificar, posso confiar em um script X start (como /etc/X11/Xsession.d/um ou em um script chamado pelo sistema de inicialização automática xdg /etc/xdg/autostart/) para modificar o perfil do usuário no início da sessão, mas preciso de uma solução que trabalho. Não consigo carregar certificados nos perfis de usuário a partir da linha de comando agora!

Jorge Suárez de Lis
fonte
A edição do perfil padrão é uma opção (para que os certificados adicionados recentemente sejam adicionados quando um novo perfil for criado, mas os perfis antigos permaneçam inalterados)?
Andrea Corbellini 27/01
Não, aproximadamente 100 perfis já existem e novos perfis são uma coisa rara.
Jorge Suárez de Lis
Você não pode gerar uma nova pasta de perfil no diretório do Firefox e adicioná-la profiles.ini? Em seguida, você pode adicionar suas alterações e copiá-lo profiles.inipara cada diretório de usuário.
Wilf 30/10
NB Você pode editar perfis para o Firefox executando firefox -p- mas é necessário fechar o Firefox primeiro.
Wilf #
Não, existem +100 usuários com seu próprio perfil já existente. Eles não gostam de perder seus favoritos, histórico, senhas, etc.
Jorge Suárez de Lis

Respostas:

20

O problema aqui é que o Firefox não possui um local 'central' onde procura certificados. Apenas analisa o perfil atual. É por isso que modificar /usr/share/ca-certificatesou outros diretórios semelhantes não funciona com o Firefox. Isso é algo que é solicitado há anos; consulte os problemas 620373 , 449498 e 454036 (e provavelmente existem muitos outros).

Então você tem apenas dois tipos de soluções: modifique cada perfil ou modifique o comportamento do Firefox. Sei que não é isso que você está procurando, mas não há como o Firefox olhar apenas para os perfis dos usuários.

Dito isto, a solução que eu escolheria é usar links físicos ou simbólicos, especificamente eu usaria links físicos. Essa solução é certamente a mais fácil e provavelmente a melhor, embora eu não tenha informações suficientes para julgar.

O que você precisa fazer é remover basicamente os arquivos cert8.dbe key3.dbpara cada perfil e substituí-los por links para os "mais completos" cert8.dbe key3.db. Se você vai com hardlinks, o original cert8.dbe key3.dbserá indistinguível dos novos.

Lembre-se de ajustar as permissões para atender às suas necessidades. Provavelmente, você precisará fazer chmod a+rwisso para que todos possam adicionar / remover um certificado. Se você deseja que apenas alguns usuários possam adicionar / remover certificados, crie um grupo, atribua os dois bancos de dados a esse grupo e dê +wpermissão apenas ao grupo.

Andrea Corbellini
fonte
Sim, o mesmo que eu poderia inventar. É uma pena para o Firefox, imo.
precisa saber é
Mas não substitui os certificados do usuário? Os certificados de usuário não estão armazenados lá?
Jorge Suárez de Lis
@ JorgeSuárezdeLis: bem, quando você excluir esses arquivos, perderá os certificados. Se é isso que você quer dizer com "substituição", então sim. Você deve mesclar todos os bancos de dados em um e depois criar os hardlinks.
Andrea Corbellini 27/01
Mas ... eu não quero que um usuário tenha os certificados pessoais dos outros! Estou falando agora dos certificados deles, não das autoridades de certificação.
Jorge Suárez de Lis
@ JorgeSuárezdeLis: desculpe, não consigo entender: o que são certificados pessoais ?
Andrea Corbellini 28/10
15

A maneira mais fácil é importar o certificado em um exemplo de perfil do firefox e depois copiar o cert8.db para os usuários que você deseja equipar com o certificado.

Primeiro importe o certificado manualmente para o perfil do firefox do usuário da amostra. Então copie

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

nos usuários firefox-profiles. É isso aí. Se você deseja garantir que novos usuários obtenham o certificado automaticamente, copie cert8.dbpara:

/etc/firefox-3.0/profile

Aqui está uma maneira alternativa que não substitui os 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

Você pode encontrar certutil no pacote libnss3-tools (debian / ubuntu).

Consulte também: Importação programática do certificado da CA

Fonte: Instalar programaticamente o certificado no Mozilla

TomKat
fonte
+1, mas se você aprovar isso, talvez também promova as respostas no StackOverflow das quais isso foi derivado.
tripleee
4

Ao contrário da crença popular, você pode fazer o Firefox examinar os certificados do sistema, em vez de seu próprio conjunto codificado.

Para fazer isso, você desejará usar um pacote chamado p11-kit . O p11-kit fornece um substituto para libnssckbi.soa biblioteca compartilhada que contém o conjunto de certificados codificados. A versão do p11-kit lê os certificados no armazenamento de certificados do sistema.

Como o Firefox é fornecido com sua própria versão libnssckbi.so, você precisará localizá-lo e substituí-lo, em vez da versão fornecida na 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

Em seguida, exclua o ~/.pkidiretório para que o Firefox atualize seu banco de dados de certificados (fazendo com que ele receba os certificados do sistema) ao reiniciar o Firefox. Nota: isso excluirá todos os certificados existentes na loja; portanto, se houver certificados personalizados adicionados manualmente, convém fazer backup dessa pasta e importá-los novamente.

veículo com rodas
fonte
Uau, isso é meio que um hack, mas +1. Você pode adicionar uma dpkg-divertetapa para evitar que o APT substitua o arquivo novamente ao atualizar o pacote Firefox.
Gtvdijk
@wheeler. Você sabe se isso ainda funciona? Eu tentei com o Ubuntu 18.04 e depois de executar este Firefox não carrega nenhum dos certificados. Tenho p11-kit 0.23.9-2
Kevin Vasko
1

Um dos recursos do complemento CCK Wizard Firefox é a importação de certificados da CA. Eu uso esse complemento para criar um complemento personalizado que inclui um CA Cert da empresa. Em seguida, empacoto o xpi personalizado em um .deb no repositório interno do qual todas as estações de trabalho obtêm atualizações.

Assistente CCK

EDIT: Para empacotar o xpi para Ubuntu, você precisa criar um pacote que inclua o diretório / usr / lib / firefox-addons / extensions / [addon-name @ servername] e descompacte todo o conteúdo do xpi neste diretório . Por exemplo, se você nomear seu addon foobarbaz e o servidor para o qual você configurou a atualização (se você habilitar essa função) for intranet.example.com, o diretório será [email protected]. Eu nunca ativei a atualização automática, mas atualizei o deb no repo.

Benjamin Long
fonte
Prefiro esse método do que os outros, porque é independente e pode incluir várias outras personalizações em um só lugar. O autor parece ter removido sua extensão do AMO. Agora ele tem em seu próprio site aqui , e as últimas xpi é aqui .
Amit Naidu
1

O Firefox funciona após uma instalação limpa. Se o banco de dados do certificado cert8.dbfor excluído, ele será regenerado na próxima inicialização do Firefox. Isso sugere fortemente que há um armazenamento padrão de certificados de autoridade de certificação em todo o sistema.

O código fonte do Firefox mostra que os certificados CA incorporados são de fato codificados em firefoxexecutáveis. Eles residem em security / nss / lib / ckfw / builtins / certdata.txt

Portanto, não há como instalar um certificado em todo o sistema. Lembre-se de que o patch do código fonte pode trazer problemas aos direitos de propriedade intelectual.

yanychar
fonte
1

Estou usando um aplicativo "Virtualização do Ambiente de Usuário" (UEV) que faz isso para meus usuários, mas você pode fazer isso com scripts de logon em clientes Windows da mesma forma. Não postarei todo o código para encontrar dinamicamente o caminho% APPDATA% \ Mozilla \ Firefox \% PROFILE%, mas quando você o encontrar, poderá importar os scripts usando alguns comandos básicos. Basicamente, estou lendo o arquivo profiles.ini do Firefox para determinar o caminho para o perfil / cert8.db do Firefox.

Você pode querer usar o aplicativo certutil.exe. https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/tools/NSS_Tools_certutil

Você pode executar scripts de logon para usuários que importam automaticamente os certificados confiáveis ​​de um local central para o Firefox de todos os usuários no sistema.

Aqui está o "núcleo" do meu certificado de importação de script 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
Tony Massa
fonte
1

Descobri que na maioria das vezes e por padrão, se não configurado, o Firefox usa bancos de dados de segurança herdados (cert8.db, key3.db e secmod.db), o que significa que você precisará usar uma linha de comando diferente para injetar o certificado. o banco de dados correto que o Firefox usa. (veja mais do homem de certutil)

portanto, se seu sistema usa o banco de dados padrão, o comando deve ser assim: (dbm)

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

caso contrário, deve ser assim: (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
fonte
Usando meus arquivos .pem com o primeiro certutilcomando funcionou. Eu estava procurando automatizar um script de configuração de usuário único e isso faz o truque. Você precisará apt-get install libnss3-toolster certutil.
XmlPage #