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


Meu trabalho decidiu emitir seus próprios autoridade de certificação (CA) para lidar com diferentes aspectos do nosso trabalho de forma segura, sem pagar por certificados.

  • Cryptographically assinar e-mails
  • Criptografar o conteúdo do email
  • Faça acesso a coisas como a empresa IRC certificado de cliente baseado.
  • Revogar as chaves dos ex-funcionários automaticamente

Eles me enviaram um .pem arquivo, e eu não sei como adicioná-lo à minha instalação do Ubuntu. As instruções enviadas foram: "Clicar duas vezes sobre ele em um Mac deve instalá-lo."

Como eu procuro? Eu preciso fazer algo com OpenSSL para criar um .key, .csrou .crt Arquivo?


133


origem




Respostas:


Instalando uma CA

Copie seu certificado no formato PEM (o formato que ----BEGIN CERTIFICATE---- nela) em /usr/local/share/ca-certificates e nomeá-lo com um .crt extensão de arquivo.

Então corra sudo update-ca-certificates.

Ressalvas: Essa instalação afeta apenas os produtos que usam esse armazenamento de certificados. Alguns produtos podem usar outros armazenamentos de certificados; Se você usar esses produtos, precisará adicionar esse certificado de autoridade de certificação também a esses outros armazenamentos de certificados. (Instruções do Firefox, Instruções do Chrome, Instruções Java)

Testando o 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ê está usando usando um certificado assinado pela CA que 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 perto do topo da saída. Isso deve mostrar o CA como o emissor (ao lado i:). Isso informa que o servidor está apresentando um certificado assinado pela CA que você está instalando.

Em segundo lugar, procure o verify return code no final a ser definido como 0 (ok).


178



este realmente funciona - Sabareesh Kkanan
Obrigado por observar que o firefox / chrome não usa a loja cert padrão. - shokora
Observe que update-ca-certificates pode ser muito exigente (provavelmente por design). mycert.pem.crt NÃO funcionou, mas mycert.crt fez. Eu também acho que ele precisa ser / usr / local / share / ca-certificates, não / usr / share / ca-certificates (apesar dos comentários mencionados no /etc/ca-certificates.conf). - labyrinth
Obrigado pelo crt comentário de extensão, que era o segredo para conseguir este trabalho para mim, me foi dado um certificado com um cert extensão e estava confuso quanto ao porquê de nada estava funcionando. - Ransom Briggs
Uma ressalva: s_client não envia SNI por padrão e o servidor pode precisar de SNI especialmente se ele suportar hosts virtuais / sites com certs diferentes; para este caso adicionar -servername foo.whatever.com. Ou se é um rede uso do servidor (versões modernas de) curl ou wget que fazem o SNI automaticamente. - dave_thompson_085


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.

Do acima, eu inferiria que a maneira preferida de obter arquivos de certificados locais para o armazenamento confiável é colocá-los em /usr/local/share/ca-certificatese, em seguida, execute update-ca-certificates. Você não precisa tocar /etc/ssl/certs diretamente.


56



Nomear os certificados com extensões .crt também parecia ser necessário. - phyzome
Obrigado pela nota @phyzome - não teria sido possível adicionar meu certificado de outra forma. - Seiyria


Eu tive o mesmo problema, e eu tive que copiar o .pem arquivo para /usr/local/share/ca-certificates, renomeá-lo como .crt. o .cer arquivo pode ser facilmente convertido para .pem, com openssl, por exemplo, se você não tem o .pem.

Depois de copiar o arquivo, você deve executar sudo update-ca-certificates.


15



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


As outras respostas sobre update-ca-certificates estão corretos para aplicativos que lêem no armazenamento de certificados do sistema. Para o Chrome e o Firefox, e provavelmente alguns outros, o certificado deve ser colocado no nssdb, o backend da biblioteca do Mozilla NSS.

A partir de https://code.google.com/p/chromium/wiki/LinuxCertManagement:

Por exemplo, para confiar em um certificado de 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:


12



obrigado. Ele funciona no Ubuntu 16.04 para o Chrome 53.0.2785.143, mas o Firefox 49 parece ter um banco de dados separado e deve ser adicionado de about: preferences # advanced [Ver Certiticates] -> [Authorities] -> [Import] Mais sobre a loja firefox cert. askubuntu.com/a/248326/535154 - mauron85
By the way, se você quiser instalar o cert antes primeira execução do Chrome (ou seja, embora ainda esteja faltando .pki / dir), 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 fazer com que o Chrome e o Firefox leiam a partir do armazenamento de certificados do sistema. Veja minha resposta: superuser.com/a/1312419/506107 - wheeler


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

sudo dpkg-reconfigure ca-certificates

OBSERVAÇÃO: o sudo dpkg-reconfigure ca-certificates chama internamente os certificados update-ca

Você obviamente ainda precisará copiar o certificado (arquivo .crt) para / usr / share / ca-certificates antes de fazer algo assim :)


8





Construindo em dwmw2 responda, você pode realmente dizer aos aplicativos que usam o NSS para o gerenciamento de certificados para usar o armazenamento confiável do sistema.

libnss3 por padrão, é fornecido com um conjunto somente leitura de certificados de CA raiz (libnssckbi.so), portanto, na maioria das vezes, você precisa adicioná-los manualmente à loja confiável local do usuário, localizada em $HOME/.pki/nssdb. p11-kit oferece um substituto para libnssckbi.so que atua como um adaptador para os certificados raiz do sistema instalados em /etc/ssl/certs.

Editar:

Parece haver mais versões de libnssckbi.so lá fora do que apenas em libnss3. O seguinte é um script para encontrá-los, 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-kit e libnss3 (se eles já não estiverem instalados):

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

Então faça o backup do existente libnssckbi.so fornecido por libnss3:

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

Finalmente, 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.so e 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 à loja da CA usando update-ca-certificates, esses certificados estarão agora disponíveis para aplicativos usando NSS (libnss3) como o Chrome.


1





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

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

Você pode consertar isso no Ubuntu também instalando o p11-kit-modules pacote e, em seguida, substituindo o NSS raízes de confiança integradas módulo com p11-kit-trust.so, fazendo um link simbólico, por exemplo, de /usr/lib/firefox/libnssckbi.so para /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so

Então você vai obtenha as raízes de confiança configuradas do sistema, não algumas codificadas. Note que o Ubuntu envia vários diferente cópias dessa biblioteca libnssckbi.so com as raízes de confiança codificadas, e você deve substituir todas elas!

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


1



Quando eu fiz sudo find / -type f -name "libnssckbi.so", Foi encontrada libnssckbi.so em três lugares: /usr/lib/thunderbird/, /usr/lib/firefox/e /usr/lib/x86_64-linux-gnu/nss/. Então você está dizendo que eu deveria ligar o libnssckbi.so em todas as três dessas pastas para p11-kit-trust.so? - wheeler
Ok, apenas confirmou que link /usr/lib/x86_64-linux-gnu/nss/libnssckbi.so -> /usr/lib/x86_64-linux-gnu/pkcs11/p11-kit-trust.so funcionou como um CHARM. Consegui adicionar um certificado em /usr/local/share/ca-certificates, corre sudo update-ca-certificatese PRESTO, o Chrome começou a aceitar os certificados auto-assinados. - wheeler


Sério resposta estúpida para adicionar aqui, mas eu tinha passado 2 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 para o meu sucesso depois de seguir: Steven segunda-feiraconselho de


0