Tengo dispositivos integrados que están ubicados en diferentes cites y conectados a mi servidor OpenVPN. Inicializo mis dispositivos antes de implementarlos y coloco el par de certificado / clave a través de la red local. Cuando los dispositivos se conectan al sitio remoto, se conectan a mi servidor openVPN a través de un túnel privado. Estoy usando la versión OpenVPN: 2.3.10 con EasyRSA en Ubuntu 16.04 LTS
Ahora los certificados están a punto de caducar. ¿Cómo puedo renovar los certificados en estos dispositivos? Estoy pensando en 2 enfoques.
Enfoque 1) Una secuencia de comandos en el dispositivo que verifica la validez del certificado cada mes aproximadamente y cuando el certificado está a punto de caducar, debe enviar una solicitud de generación de certificado (una solicitud estándar de obtención de https o similar). En el extremo del servidor, solo se deben atender las solicitudes provenientes de un túnel privado. Un certificado / clave con el mismo CN se debe generar y transferir al cliente.
Problemas con el apporach 1)
- ¿Cómo se debe transferir el par certificado / clave de forma segura? No quiero intercambiar la clave privada de los clientes a través de la red.
- El proceso completo debería estar automatizado para que no pueda poner la clave manualmente.
- ¿Cómo se debe generar el certificado / clave en el servidor? Tampoco quiero que el usuario web de apache, es decir, www-data, tenga acceso a mi carpeta easyRSA.
Enfoque 2) Generar clave privada en el extremo del cliente (mi dispositivo integrado). Crear una solicitud de firma de certificado (CSR) enviarla al servidor OpenVPN (que también es mi CA). La CA genera un certificado y devuelve el certificado del cliente.
Problemas con el apporach 2)
-
¿Cómo autenticar CSR? ¿Cómo puedo saber que la CSR proviene de mi dispositivo integrado y no de algún atacante? La única forma en que puedo asegurarlo es si la CSR proviene del túnel privado.
-
En caso de que el certificado de mi dispositivo integrado caduque antes de la renovación, el túnel privado no existiría. ¿Cómo puedo autenticar la RSE en este caso? Cualquiera con CA.crt (clave pública de CA) puede generar una clave privada y enviar una CSR a CA.
Creo que el enfoque 2 parece más razonable y seguro, pero no conozco la solución a los problemas a los que me enfrento. ¿Quiero saber si tengo una comprensión correcta de la seguridad? O si hay algo que me falta. Además, si voy con el enfoque 2, ¿cómo sería la implementación? Conozco la teoría pero no sé cómo crear CSR y enviarla a CA. Y en CA, finalice cómo recibir un CSR y generar un certificado y enviarlo de vuelta.