Eu herdei um servidor Postgres da empresa com clientes SSL. São cerca de 100 usuários até agora.
Dois problemas: Meu Ca Cert (root.crt) expira no próximo ano e parece ainda ser TlsV1.0. Portanto, uma atualização (renovação) é urgentemente necessária.
O que devo evitar é fazer novos certificados de cliente para todos os usuários em um. Seria um pesadelo para mim :-)
Então, procurei uma solução onde os certificados antigos e novos funcionariam, até que todos os certificados antigos expirassem. Gostei muito das dicas (também no Serverfault), mas nada funcionou até agora.
O que fiz até agora: usei a chave ca antiga (rootCa.key) e criei um novo root.crt) e usei a chave antiga do servidor (server.key) para criar um novo server.crt. Instalei a lista de revogação (root.crl), root.crt, server.crt e server.key no meu servidor de backup Postgres.
Eu posso me conectar com o certificado newUser.crt, mas não com os antigos... como eu esperava.
Eu pesquisei na web como o inferno e encontrei uma dica para mesclar certificados antigos e novos no servidor. Então eu combinei os certs com cat: cat oldRoot.crt >> root.crt para os outros arquivos também. A lista de revogação não funcionou, então comentei a linha: #ssl_crl_file = in Postgres.conf. Parece que o Postgres também funciona sem lista de revogação.
Resultado: Dependendo de qual certificado vem primeiro no server.crt, eu poderia conectar com certificados antigos ou novos, mas nunca com ambos. Para testá-lo, usei root.crt mesclado com oldServer.cert e também com newServer.cert. Ambos trabalharam com novos ou antigos.
Isso significa que um root.crt mesclado está funcionando bem, mas não um server.crt mesclado.
Eu verifiquei com openssl e merged root.crt e merged server.crt: openssl check -verbose -x509_strict -CAfile root.crt -CApath . old_cert.crt server.crt old_cert.crt: OK server.crt: OK
openssl check -verbose -x509_strict -CAfile root.crt -CApath . new_cert.crt server.crt new_cert.crt: OK server.crt: OK
Parece que o openssl pode gerenciar certificados mesclados, mas não o Postgres.
Alguma ideia de como resolver este problema?
Qualquer dica é apreciada.
Atenciosamente Schlauchi
servidor: Ubuntu 2104, servidor de backup Postgres13: Ubuntu 1604, Postgres13
Minha resposta curta à minha pergunta é: Yabadabbadooh .... é possível e funciona no meu sistema de backup!
Não me deixou dormir, então comecei de novo do zero: primeiro verifiquei se havia alguma diferença nos certificados antigos e novos novamente, a única diferença era uma ordem diferente no assunto, mas o mesmo conteúdo.
#1 Então eu fiz um novo root.crt e server.crt com o antigo rootCa.key e o antigo server.key com a mesma ordem de assunto. Agora a saída de texto era idêntica (assunto, Algoritmo de Assinatura....)
#2 Fiz um novo userCert com root.crt.
#3 Instalei os certificados no Postgres e testei -> funcionando.
#4 desta vez comecei com novos certificados no topo.
postgres restart ...... E agora os certificados antigos e novos estão funcionando!
#5 Verifique o contrário, copie os certificados antigos sobre os mesclados e, em seguida:
postgres restart ...... e não está mais funcionando. Volte para a etapa 4, tudo estava funcionando bem novamente.
#6 Lista de revogação: criei uma lista de revogação para os novos certificados e instalei no postgres. então:
descomentei a linha: ssl_crl_file = /root.crl postgres restart ...... E tudo está funcionando bem.
Eu não tenho idéia de por que está funcionando agora, eu realmente não posso acreditar que é a ordem do assunto... acho que fiz algo errado nas primeiras tentativas. Mas não vou tentar descobrir, funciona e é isso :-)
Conclusão:
Faça root.crt (CA) e server.crt com chaves antigas e da forma mais idêntica possível. (verificar assunto e tal)
Mesclar certificados, lista de revogação e chave para que os antigos fiquem na parte inferior do arquivo
Agora os certificados antigos estão funcionando até expirarem e você pode criar novos certificados (com nova CA) com Tls atualizados, por exemplo.
Algumas informações adicionais sobre a versão Tls. Quando atualizei meu servidor para Ubuntu 2104 e Postgres 13, os certificados não funcionaram. Encontrei a dica para adicionar esta linha em /etc/ssl/openssl.conf
Eu sei que isso não é bom, mas ajudou no momento. Não consegui encontrar uma maneira de testar se os certificados são Tlsv1.0 ou superior. O único teste se seu TlsV1.2 estava usando pgsql (13) ou pgadmin4, ambos não funcionarão com TlsV1.0
Então, no meu arquivo de configuração para criação de certificado, eu uso isso:
psql (13) e pgadmin4 agora funcionam com os novos certificados. Quando todos os antigos expirarem, mudarei /etc/ssl/openssl.conf para esse valor novamente.
A atualização para a próxima versão do Tls perdeu sua picada :-)