Como você adiciona uma autoridade de certificação (CA) ao Ubuntu?


166

Meu trabalho decidiu emitir sua própria autoridade de certificação (CA) para lidar com diferentes aspectos de nosso trabalho com segurança, sem pagar pelos certificados.

  • Assinar criptograficamente emails
  • Criptografar o conteúdo do email
  • Tenha acesso a coisas como o certificado de cliente IRC da empresa .
  • Revogar as chaves de ex-funcionários automaticamente

Eles me enviaram um .pemarquivo e não sei como adicioná-lo à minha instalação do Ubuntu. As instruções enviadas foram: "Clicar duas vezes nele no Mac deve instalá-lo." 

Como procedo? Preciso fazer alguma coisa com OpenSSL para criar uma .key, .csrou .crtarquivo?


2
o comentário "As instruções enviadas foram: \" Clicar duas vezes nele em um Mac deve instalá-lo. \ "" fez o meu dia
mzoll

Respostas:


231

Instalando uma CA

Copie seu certificado no formato PEM (o formato que contém ----BEGIN CERTIFICATE----) /usr/local/share/ca-certificatese atribua um nome a ele com uma .crtextensão de arquivo.

Então corra sudo update-ca-certificates.

Advertências: Esta instalação afeta apenas produtos que usam este armazenamento de certificados. Alguns produtos podem usar outros armazenamentos de certificados; se você usar esses produtos, precisará adicionar esse certificado da CA a esses outros armazenamentos de certificados. ( Instruções para Firefox , Instruções para Chrome , Instruções para Java )

Testando a CA

Você pode verificar se isso funcionou procurando o certificado que você acabou de adicionar /etc/ssl/certs/ca-certificates.crt(que é apenas uma longa lista de todas as suas CAs confiáveis ​​concatenadas juntas).

Você também pode usar o s_client do OpenSSL tentando se conectar a um servidor que você sabe que está usando um certificado assinado pela CA que você acabou de instalar.

$ openssl s_client -connect foo.whatever.com:443 -CApath /etc/ssl/certs

CONNECTED(00000003)
depth=1 C = US, ST = Virginia, O = "Whatever, Inc.", CN = whatever.com, emailAddress = admin@whatever.com
verify return:1
depth=0 C = US, ST = Virginia, L = Arlington, O = "Whatever, Inc.", CN = foo.whatever.com
verify return:1
---
Certificate chain
 0 s:/C=US/ST=Virginia/L=Arlington/O=Whatever, Inc./CN=foo.whatever.com
   i:/C=US/ST=Virginia/O=Whatever, Inc./CN=whatever.com/emailAddress=admin@whatever.com

... snip lots of output ...

    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1392837700
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

A primeira coisa a procurar é a cadeia de certificados próxima à parte superior da saída. Isso deve mostrar a CA como emissor (ao lado de i:). Isso indica que o servidor está apresentando um certificado assinado pela CA que você está instalando.

Segundo, procure verify return codeno final a ser definido como 0 (ok).


3
este realmente funciona
Sabareesh Kkanan

1
Obrigado por observar que o firefox / chrome não usa o repositório de certificados padrão.
Tim Strijdhorst

4
Observe que os certificados update-ca-podem ser muito exigentes (provavelmente por design). mycert.pem.crt NÃO funcionou, mas mycert.crt funcionou. Também acho que ele precisa ser / usr / local / share / ca-certificate, não / usr / share / ca-certificate (apesar do que os comentários disseram no /etc/ca-certificates.conf).
labirinto

2
Obrigado pelo crtcomentário da extensão, que era o segredo para obter esse trabalho para mim, recebi um certificado com uma certextensão e fiquei confuso sobre o motivo de nada estar funcionando.
Ransom Briggs

3
Uma ressalva: s_clientnão envia SNI por padrão e o servidor pode precisar de SNI, especialmente se ele suportar hosts / sites virtuais com certificados diferentes; para este caso, adicione -servername foo.whatever.com. Ou se for um servidor da Web (versões modernas) curlou o wgetSNI automaticamente.
Dave_thompson_085 14/05

66

man update-ca-certificates :

update-ca-certificates  is  a  program  that  updates   the   directory
/etc/ssl/certs to hold SSL certificates and generates certificates.crt,
a concatenated single-file list of certificates.

It reads the file /etc/ca-certificates.conf. Each line gives a pathname
of  a  CA  certificate  under /usr/share/ca-certificates that should be
trusted.  Lines that begin with "#" are comment lines and thus ignored.
Lines  that  begin with "!" are deselected, causing the deactivation of
the CA certificate in question.

Furthermore   all   certificates   found   below   /usr/local/share/ca-
certificates are also included as implicitly trusted.

Pelo exposto, inferiria que a maneira preferida de obter arquivos de certificado local no armazenamento confiável é colocá-los /usr/local/share/ca-certificatese, em seguida, executar update-ca-certificates. Você não precisa tocar /etc/ssl/certsdiretamente.


23
Também era necessário nomear os certificados com extensões .crt.
tratar os seus mods bem

Obrigado pela observação @phyzome - não teria sido possível adicionar meu certificado de outra forma.
Seiyria 17/03/2015

1
Eu tive que adicionar --freshpara fazê-lo funcionar. por exemploupdate-ca-certificates --fresh
Elijah Lynn

15

Eu tive o mesmo problema e precisei copiar o .pemarquivo para /usr/local/share/ca-certificatesrenomeá-lo como .crt. O .cerarquivo pode ser facilmente convertido para .pem, com o openssl, por exemplo, se você não tiver o .pem.

Após copiar o arquivo, você deve executar sudo update-ca-certificates.


openssl x509 -inform DER -in certificate.cer -out certificate.crt
Webwurst

14

As outras respostas relacionadas update-ca-certificatesestão corretas para aplicativos que são lidos no armazenamento de certificados do sistema. Para Chrome e Firefox, e provavelmente alguns outros, o certificado deve ser colocado no nssdb, o backend da biblioteca Mozilla NSS.

Em https://code.google.com/p/chromium/wiki/LinuxCertManagement :

Por exemplo, para confiar em um certificado CA raiz para emitir certificados de servidor SSL, use

certutil -d sql: $ HOME / .pki / nssdb -A -t "C ,," -n <apelido do certificado> -i <nome do arquivo do certificado>

Onde <certificate nickname>é arbitrário e <certificate filename>é o seu arquivo .pem ou .crt.

Outras referências úteis:


obrigado. Ele funciona no Ubuntu 16.04 para Chrome 53.0.2785.143, mas o Firefox 49 parece ter uma loja separada db e deve ser adicionado a partir de about: preferências # avançado [Exibir Certificados] -> [Autoridades] -> [Importar] Mais sobre a loja de certificados do firefox. (Resolvido
problema na

A propósito, se você deseja instalar o cert antes da primeira execução do Chrome (por exemplo, enquanto o .pki / dir ainda está ausente), você deve primeiro criar o nssdb:mkdir -p $HOME/.pki/nssdb && chmod -R 0700 $HOME/.pki && certutil -d sql:$HOME/.pki/nssdb -N --empty-password
akavel

Existe uma maneira de obter o Chrome e o Firefox para ler no armazenamento de certificados do sistema. Veja a minha resposta: superuser.com/a/1312419/506107
veículo com rodas

11

Para compilações mais recentes baseadas no Debian, você pode precisar executar:

sudo dpkg-reconfigure ca-certificates

NOTA: O sudo dpkg-reconfigure ca-certificates chama update-ca-certificates internamente

Obviamente, você ainda precisará copiar o certificado (arquivo .crt) para / usr / share / ca-certificates antes de fazer isso :)


4

Com base na resposta do dwmw2 , você pode realmente dizer aos aplicativos que usam o NSS para seu gerenciamento de certificados usar o armazenamento confiável do sistema.

libnss3por padrão, é fornecido com um conjunto de certificados CA raiz (somente leitura libnssckbi.so), portanto, na maioria das vezes, você deve adicioná-los manualmente ao repositório de confiança do usuário local localizado em $HOME/.pki/nssdb. p11-kitoferece uma substituição de entrada libnssckbi.soque atua como um adaptador para os certificados raiz de todo o sistema instalados no /etc/ssl/certs.

Editar:

Parece haver mais versões libnssckbi.solá fora do que apenas dentro libnss3. A seguir, é apresentado um script para encontrar todos eles, fazer backup deles e substituí-los por links para p11-kit:

sudo apt-get update && sudo apt-get install -y p11-kit libnss3
find / -type f -name "libnssckbi.so" 2>/dev/null | while read line; do
    sudo mv $line ${line}.bak
    sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so $line
done

Instruções originais:

Para fazer isso, instale p11-kite libnss3(se ainda não estiver instalado novamente):

sudo apt-get update && sudo apt-get install -y p11-kit libnss3

Em seguida, faça backup do existente libnssckbi.sofornecido por libnss3:

sudo mv /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so.bak

Por fim, crie o link simbólico:

sudo ln -s /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so

Para confirmar que funcionou, você pode executar ll /usr/lib/x86_64-linux-gnu/nss/libnssckbi.soe deve mostrar o link:

lrwxrwxrwx 1 root root 49 Apr  9 20:28 /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Agora, se você adicionar um certificado ao armazenamento da CA usando update-ca-certificates, esses certificados estarão disponíveis para aplicativos usando o NSS ( libnss3) como o Chrome.


1

Como observado, vários aplicativos que usam o NSS têm seu próprio armazenamento de certificados. Como as coisas estão no Ubuntu, você precisa usar manualmente certutilpara adicionar suas CAs para cada aplicativo, para cada usuário.

Em outras distribuições como o Fedora, esse tipo de coisa Just Works ™ e você deve registrar um bug em qualquer aplicativo que não confie automaticamente nas CAs com as quais você instala update-ca-trust.

Você também pode corrigir isso no Ubuntu instalando o p11-kit-modulespacote e substituindo o módulo de raízes de confiança interno do NSS p11-kit-trust.sopor, criando um link simbólico, por exemplo, de /usr/lib/firefox/libnssckbi.sopara/usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Então você vai obter raízes de confiança configurado do sistema, e não alguns mais hard-coded. Observe que o Ubuntu envia várias cópias diferentes dessa biblioteca libnssckbi.so com as raízes de confiança codificadas e você precisa substituir todas elas!

cf. https://bugs.launchpad.net/ubuntu/+source/nss/+bug/1647285


Quando eu fiz sudo find / -type f -name "libnssckbi.so", ele encontrou libnssckbi.soem três locais: /usr/lib/thunderbird/, /usr/lib/firefox/, e /usr/lib/x86_64-linux-gnu/nss/. Então você está dizendo que eu deveria vincular o arquivo libnssckbi.sonas três pastas p11-kit-trust.so?
veículo com rodas

1
Ok, apenas confirmei que a ligação /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so-> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.sofuncionava como um encanto. Consegui adicionar um certificado /usr/local/share/ca-certificates, executar sudo update-ca-certificatese PRESTO, o Chrome começou a aceitar os certificados autoassinados.
veículo com rodas

0

Resposta seriamente estúpida para adicionar aqui, mas eu tinha passado duas horas indo e voltando com certutils no linux ... eu tinha certeza de que tudo estava correto:

hutber@hutber-mint /var/www/asos-mvt-framework $ certutil -L -d sql:${HOME}/.pki/nssdb

Certificate Nickname                                         Trust Attributes
                                                             SSL,S/MIME,JAR/XPI

anyproxy                                                     CT,, 
rootCA                                                       CT,, 
myasos                                                       CT,, 

Mas ainda assim, no cromo, nada estava funcionando. Eu tentei de tudo, no final ....

Restarting Chrome

Foi a chave do meu sucesso depois de seguir: Conselho de Steven Monday

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.