Modificar el certificado TLS de Cyberwatch

Formato requerido para el certificado y la clave

El certificado y la clave deben estar en formato PEM.

La clave debe estar sin cifrar.

Este formato es solo una convención de nomenclatura; la extensión de los archivos del certificado y la clave no tiene un valor técnico real.

Esto indica que los archivos esperados están en formato texto, con el contenido del certificado codificado en base 64 entre las siguientes cadenas:

-----BEGIN CERTIFICATE-----
...certificado_codificado...
-----END CERTIFICATE-----

Con Docker Swarm

  1. Copiar el nuevo certificado en el contenedor nginx:

    docker cp monfichier.crt $(docker ps -f name=cbwonpremise_nginx -q):/etc/nginx/ssl/nginx.crt
    docker cp monfichier.key $(docker ps -f name=cbwonpremise_nginx -q):/etc/nginx/ssl/nginx.key
    

    El archivo nginx.crt contiene el certificado, seguido si es necesario de los certificados intermedios. No es necesario modificar los permisos de los archivos, ya que al iniciarse, Cyberwatch los asigna al usuario del contenedor nginx y restringe su acceso.

  2. (Recomendado) Activar el header HSTS:

    Se recomienda activar el header HSTS para reforzar la seguridad de las conexiones forzando el uso del protocolo HTTPS.

    Añadir la siguiente línea en el archivo /etc/cyberwatch/containers.env:

    ENABLE_HSTS="true"
    
  3. Reiniciar Cyberwatch:

    sudo cyberwatch restart
    
  4. Verificar los archivos vistos por el contenedor nginx:

    sudo cyberwatch exec nginx ls -l /etc/nginx/ssl
    
    total 8
    -rw-------    1 nginx    nginx         1274 Oct  6 09:22 nginx.crt
    -rw-------    1 nginx    nginx         1705 Oct  6 09:22 nginx.key
    

El certificado emitido por Cyberwatch, utilizado por defecto, se renueva automáticamente al iniciarse antes de su expiración. En cambio, Cyberwatch nunca sustituye un certificado que no ha emitido: se muestra una advertencia al iniciarse cuando se acerca su fecha de expiración, y entonces es necesario instalar un nuevo certificado siguiendo este procedimiento.

Troubleshooting

En caso de que Cyberwatch no reinicie, es posible consultar los logs del contenedor nginx con el siguiente comando:

sudo cyberwatch logs nginx -f

Si ocurre un problema al añadir el nuevo certificado, debería aparecer un error en estos logs.

Una mala configuración del certificado puede provocar un crash del contenedor nginx. Como este contenedor debe estar iniciado para permitir la reconfiguración del certificado, primero es necesario volver a un certificado emitido por Cyberwatch:

  1. Sustituir el certificado instalado por un certificado emitido por Cyberwatch:

    sudo cyberwatch renew-certificates --force nginx-ssl
    
  2. Reiniciar Cyberwatch:

    sudo cyberwatch restart
    
  3. Configurar el certificado de nuevo, siguiendo el procedimiento completo descrito arriba

El comando cyberwatch renew-certificates está disponible a partir de la versión 5.32 de la base del orquestador.

Con Kubernetes

  1. Requisitos previos: haber lanzado al menos una vez Cyberwatch
  2. Sustituir los archivos nginx.crt y nginx.key respectivamente por el certificado y la clave privada asociada en la carpeta /var/lib/volumes/cyberwatch/ssl
  3. Reiniciar Cyberwatch:

    sudo cyberwatch restart
    

Con Podman

Este procedimiento se aplica a partir de la versión 1.4 del orquestador Podman, que almacena el certificado presentado por la interfaz web en la carpeta /etc/cyberwatch/ssl.

  1. Copiar el nuevo certificado así como la clave en la carpeta /etc/cyberwatch/ssl, asignándolos al usuario cyberwatch que ejecuta los contenedores:

    sudo install -o cyberwatch -g cyberwatch -m 600 monfichier.crt /etc/cyberwatch/ssl/nginx.crt
    sudo install -o cyberwatch -g cyberwatch -m 600 monfichier.key /etc/cyberwatch/ssl/nginx.key
    

    El archivo nginx.crt contiene el certificado, seguido si es necesario de los certificados intermedios.

  2. (Recomendado) Activar el header HSTS pasando la variable ENABLE_HSTS a true en el archivo /etc/cyberwatch/containers.env:

    ENABLE_HSTS='true'
    
  3. Reiniciar Cyberwatch:

    sudo cyberwatch restart
    
  4. Verificar el certificado presentado por la interfaz web, en el puerto 8443 por defecto:

    openssl s_client -connect localhost:8443 </dev/null 2>/dev/null | openssl x509 -noout -subject -enddate
    

Troubleshooting con Podman

En caso de que Cyberwatch no reinicie, debería aparecer un error relacionado con el certificado en los logs del contenedor nginx:

sudo cyberwatch logs nginx -f

Para volver a un certificado autofirmado, eliminar el certificado y la clave y luego reiniciar Cyberwatch. El contenedor nginx genera entonces un nuevo certificado:

sudo rm /etc/cyberwatch/ssl/nginx.crt /etc/cyberwatch/ssl/nginx.key
sudo cyberwatch restart