Como fazer com que o Ubuntu confie em um novo certificado raiz de forma não interativa?

7

Depois de criar uma nova autoridade de certificação , importe manualmente a cadeia CA para um navegador e verificando se os navegadores podem confiar em novos certificados assinados com o intermediário, copiamos a cadeia de certificados da CA (formatada em pem e crt) para nossos servidores Ubuntu sob os seguintes diretórios:

  • / etc / ssl / certificates /
  • / usr / local / share / certificados de ca /

Uma vez feito isso, os aplicativos nas máquinas Ubuntu, como wget / curl / java, ainda não confiam nas conexões que usam os novos certificados. De acordo com outro post , precisamos executar dpkg-reconfigure -f noninteractive ca-certificates ou update-ca-certificates em cada máquina que possui o certificado. Não apenas esses comandos não funcionaram, seria impraticável executá-los em milhares de servidores. Nós usamos CFEngine para gerenciamento de configuração, mas não parece ter uma facilidade para esse tipo de coisa, até onde eu sei.

Existe uma maneira de fazer o script do Ubuntu para atualizar de forma não interativa os CERs confiáveis da CA de uma maneira que funcione contra milhares de computadores?

    
por MrDrMcCoy 16.03.2017 / 02:32

2 respostas

5

Concordo com tudo o que o BillThor mencionou, mas acrescentarei que talvez seja necessário reconstruir completamente o repositório de certificados, porque às vezes parece que o update-ca-certificates tenta ser muito preguiçoso e na verdade não atualiza coisas que deveria.

rm -f /usr/local/share/ca-certificates/certificate.crt
# --fresh is needed to remove symlinks to no-longer-present certificates
update-ca-certificates --fresh

Além disso, observe que, uma vez que os certificados update-ca forem concluídos, eles deverão ter os links vinculados dos arquivos /etc/ssl/certs/*.pem aos seus respectivos certificados em /usr/local/share/ca-certificates/ ou /usr/share/ca-certificates/ . Como o BillThor mencionou, também haverá um link simbólico para um arquivo com a impressão digital como um nome - será semelhante a 349f2832.0 .

Um ls -l pode confirmar isso:

--snip--
lrwxrwxrwx 1 root root     72 Feb  6  2014 Security_Communication_EV_RootCA1.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_EV_RootCA1.crt
lrwxrwxrwx 1 root root     69 Mar 25  2014 Security_Communication_RootCA2.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_RootCA2.crt
lrwxrwxrwx 1 root root     69 Feb  6  2014 Security_Communication_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Security_Communication_Root_CA.crt
lrwxrwxrwx 1 root root     61 Feb  6  2014 Sonera_Class_1_Root_CA.pem -> /usr/share/ca-certificates/mozilla/Sonera_Class_1_Root_CA.crt
--snip--

Observe também que * .crt e * .pem são o mesmo arquivo . Isso significa que o original .crt deve estar no formato .pem.

Um arquivo no formato .pem tem esta aparência:

-----BEGIN CERTIFICATE-----
MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
--snip--
IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
O+7ETPTsJ3xCwnR8gooJybQDJbw=
-----END CERTIFICATE-----

Você pode testar a instalação do seu certificado executando o openssl no certificado: %código% e %código% (naturalmente substituindo [certname])

Você deve ver algumas informações extensas sobre o seu certificado, e ambos devem corresponder (já que com um link simbólico eles devem ser o mesmo arquivo).

Se eles não corresponderem, você deverá executar novamente openssl x509 -in /etc/ssl/certs/[certname].pem -noout -text

Se eles não gerarem informações úteis, você precisará verificar seu certificado e certificar-se de que ele esteja no formato PEM válido.

EDIT : BillThor mencionou que isso não funcionará para Java, mas parece que, pelo menos no debian, o armazenamento de certificados do Java também é mantido atualizado pela ferramenta update-ca-certificates. Não estou ciente de outras coisas no Linux que usam um armazenamento de certificados alternativo, além de talvez o Wine executando um aplicativo do Adobe Air.

    
por 17.03.2017 / 22:47
1

Ferramentas como update-ca-certificates garantem que o certificado esteja vinculado por um link simbólico que corresponda ao valor do hash do certificado. Ao implantar certificados usando cfengine , incluo uma etapa para adicionar o link simbólico após o certificado ser copiado. Eu achei isso mais simples de definir do que executar um programa quando o certificado foi instalado.

O Java usa um arquivo cacerts localizado no diretório de instalação. Você precisará instalar um novo arquivo cacerts ou importar o certificado para o arquivo cacerts . Como alternativa, você poderá instalar um arquivo jssecacerts próximo ao arquivo cacerts existente. Com qualquer arquivo, você precisa garantir que o arquivo contenha todos os certificados nos quais você deseja confiar. Isso pode ser um subconjunto do conjunto padrão. A opção mais simples e estável seria instalar o arquivo na versão padrão do Java. Os certificados em cacerts são atualizados periodicamente conforme várias autoridades de certificação atualizam seus certificados de confiança públicos, portanto, você precisará manter esse arquivo com o passar do tempo.

Dependendo de qual navegador você está usando, pode ser necessário instalar o certificado como um certificado confiável no armazenamento de chaves do navegador, o que pode não ser um dos armazenamentos já discutidos.

    
por 16.03.2017 / 04:10