Temos uma autoridade de certificação (CA) privada que é usada apenas em sites da nossa intranet.
Posso obter o certificado facilmente:
openssl s_client -showcerts -connect atlas.sim.local:8443 </dev/null 2>/dev/null|openssl x509 -outform PEM >atlas.crt
Gostaria que meus dispositivos Debian confiassem automaticamente nesta autoridade de certificação. Eu tenho apt
um repositório privado e todos os meus dispositivos Debian possuem pacotes deste repositório instalados. Portanto, gostaria que este *.crt
arquivo fosse implantado neste pacote.
O pacote efetivamente fará isso:
install -Dm644 atlas.crt /usr/share/ca-certificates/sim.local/atlas.crt
Mas como faço para regenerar os certificados ca depois que esse arquivo for implantado? Estou procurando um arquivo para implantar ou uma linha em que possa executar postinst
.
Meu primeiro pensamento foi simplesmente:
/usr/sbin/update-ca-certificates
mas man update-ca-certificates
diz:
update-ca-certificates
é um programa que atualiza o diretório/etc/ssl/certs
para conter certificados SSL e geraca-certificates.crt
...Ele lê o arquivo
/etc/ca-certificates.conf
. Cada linha fornece um nome de caminho de um certificado CA no/usr/share/ca-certificates
qual deve ser confiável.
Para que isso funcione, preciso garantir sim.local/atlas.crt
que esteja no formato /etc/ca-certificates.conf
. Infelizmente não há nada /etc/ca-certificates.conf.d/
que me permita inserir outro arquivo com esse conteúdo.
Se eu ler /etc/ca-certificates.conf
, diz:
# This file lists certificates that you wish to use or to ignore to be
# installed in /etc/ssl/certs.
# update-ca-certificates(8) will update /etc/ssl/certs by reading this file.
#
# This is autogenerated by dpkg-reconfigure ca-certificates.
Portanto, eu poderia tentar:
dpkg-reconfigure ca-certificates
Mas isso faz com que apareça uma caixa de diálogo interativa com meu certificado desmarcado por padrão. Prefiro que não seja interativo.
Este é o meu atual postinst
. mas não tenho certeza se é a solução certa. Existe uma maneira certa de fazer isso?
#!/bin/bash
set -e
case "$1" in
configure)
if [ -e /etc/ca-certificates.conf ] &&
! grep -q sim.local/atlas.crt /etc/ca-certificates.conf; then
printf "%s\n" sim.local/atlas.crt >> /etc/ca-certificates.conf;
/usr/sbin/update-ca-certificates;
fi
;;
esac
Na mesma página de manual:
Isso significa que você não precisa executar
dpkg-reconfigure
- basta colocar o.crt
arquivo/usr/local/share/ca-certificates
, executarupdates-ca-certificates
e pronto.Em seguida, adicione seu CRT no final
/etc/ca-certificates.conf
manualmente:Finalmente, ligue
update-ca-certificates
.Não se você definir a prioridade das perguntas como "alta" ou superior ("crítica"):
De qualquer forma, acredito que você deveria ligar
update-ca-certificates
, em vez dedpkg-reconfigure
-ing outro pacote.No final, a solução mais fácil foi comprar um certificado de uma CA pública. Também era mais barato do que gastar mais horas do meu tempo resolvendo o problema.
O nome comum (CN) pode ter curingas, então comprei um certificado com
CN=*.mycompany.com
e alterei o FQDN do servidor deatlas.sim.local
paraatlas.mycompany.com
.Além disso, o mesmo certificado pode ser usado em todos os nossos serviços de intranet, pois estamos migrando todas as máquinas para
*.mycompany.com
.Isso funciona para todos os aplicativos (até mesmo Firefox e Chromium com suas próprias listas de CA raiz) e todos os sistemas operacionais.
Suponho que poderíamos mover a pergunta para ServerFault, já que a resposta acabou não sendo específica do Unix.