Como renovar automaticamente os certificados de cliente OpenVPN usando o easyRSA

0

Eu tenho dispositivos incorporados que estão localizados em cidades diferentes e conectados ao meu servidor OpenVPN. Eu inicializo meus dispositivos antes de implantá-los e coloco o certificado / par de chaves através da rede local. Quando os dispositivos ficam online no site remoto, eles são conectados ao meu servidor openVPN através de um túnel privado. Estou usando a versão OpenVPN: 2.3.10 com o EasyRSA no Ubuntu 16.04 LTS

Agora os certificados estão prestes a expirar. Como posso renovar os certificados nesses dispositivos? Estou pensando em duas abordagens.

Abordagem 1) Um script no dispositivo que verifica a validade do certificado mensalmente, e quando o certificado está prestes a expirar, deve enviar uma solicitação de geração de certificado (uma solicitação padrão de https get ou similar). No final do servidor, somente solicitações provenientes de um túnel privado devem ser atendidas. Um certificado / chave com o mesmo CN deve ser gerado e transferido para o cliente.

Problemas com o apporach 1)

  • Como o par de certificados / chaves deve ser transferido com segurança? Eu não quero trocar a chave privada dos clientes via rede. Todo o processo deve ser automatizado para que eu também não possa colocar a chave manualmente.
  • Como a chave cert / deve ser gerada no servidor? Eu também não quero que o usuário da web apache, ou seja, www-data, tenha acesso à minha pasta easyRSA.

Abordagem 2) Gerar chave privada no lado do cliente (meu dispositivo incorporado). Crie uma solicitação de assinatura de certificado (CSR) para enviá-la ao servidor OpenVPN (que também é minha CA). A CA gera um certificado e envia de volta o certificado do cliente.

Problemas com o apporach 2)

  • Como autenticar o CSR? Como posso saber que o CSR está vindo do meu dispositivo incorporado e não de algum invasor? A única maneira que eu posso garantir é, se o CSR está vindo do túnel privado.

  • No caso de o certificado do meu dispositivo incorporado expirar antes da renovação, o túnel privado não existiria. Como posso autenticar o CSR neste caso? Qualquer um com CA.crt (chave pública de CAs) pode gerar uma chave privada e enviar um CSR para a CA.

Acho que a abordagem 2 parece mais razoável e segura, mas não conheço a solução para os problemas que enfrento. Eu quero saber se tenho uma compreensão correta da segurança? ou se houver algo que esteja faltando. Além disso, se eu for com a abordagem 2, como seria a implementação? Eu sei como gerar chave e criar CSR, mas qual é a melhor maneira de enviá-lo de forma segura para a CA. E no servidor / CA final, como receber o CSR e como enviar o certificado com segurança.

    
por Ahmad Karim 15.08.2018 / 09:55

0 respostas