Saltar a contenido

Certificados

Los certificados SSL deberían usarse para asegurar el acceso web y las conexiones a escritorios virtuales con visualizadores.

IsardVDI generará un certificado genérico autofirmado por defecto al instalar por primera vez si no configuras parámetros de letsencrypt. Por eso los navegadores preguntarán por la aceptación del certificado en el primer acceso a la web de IsardVDI...

Si configuras parámetros de dominio letsencrypt en isardvdi.cfg entonces generará uno para ti y lo auto-renovará (recuerda que deberías mantener los puertos 80 y 443 de tu servidor abiertos para acceso externo a través de este dominio). También, si no hay certificado presente generará uno nuevo autofirmado para usarlo por defecto.

También puedes usar tu propio certificado reemplazando el auto-generado /opt/isard/certs/default/chain.pem con tu certificado concatenado.

Esto funciona para todos los sabores (portal, video, todo-en-uno) ya que todos usan la misma configuración de certificados.

Tipos de certificados y configuración

IsardVDI soporta tres tipos de certificados SSL:

1. Certificados Auto-firmados (Por defecto)

  • Generados automáticamente cuando no se configura otro certificado
  • Bueno para: Pruebas, desarrollo, redes privadas
  • Ubicación: /opt/isard/certs/default/chain.pem
  • Advertencia del navegador: Los usuarios verán advertencias de seguridad y necesitarán aceptar manualmente el certificado

2. Certificados Let's Encrypt (Recomendado para acceso público)

  • Generados y renovados automáticamente cuando se configuran correctamente
  • Bueno para: Despliegues de producción con acceso de dominio público
  • Requisitos:
  • Nombre de dominio público apuntando a tu servidor
  • Puertos 80 y 443 accesibles desde internet
  • Dirección de email válida para notificaciones de Let's Encrypt

Configuración en isardvdi.cfg:

DOMAIN=tu-dominio.com
LETSENCRYPT_EMAIL=admin@tu-dominio.com

# Opcional: Dominio separado para sabor video hipervisor
VIDEO_DOMAIN=video.tu-dominio.com

Renovación: Renovación automática diaria a las 2:00 AM (horario por defecto de Alpine Linux)

3. Certificados Personalizados/Comerciales

  • Instalación manual de certificados de Autoridades de Certificación
  • Bueno para: Entornos empresariales con infraestructura PKI existente
  • Soporta: Certificados comerciales, certificados de CA interna, certificados wildcard

Los certificados Spice necesitan ser autofirmados y se autogeneran y distribuyen automáticamente a hipervisores auto-registrados. Se mantienen en la carpeta /opt/isard/certs/viewers.

Gestionar certificados

Los certificados se almacenan en la ruta /opt/isard/certs/ donde siempre estará el autofirmado o letsencrypt con el nombre chain.pem.

Si estás usando certificados autofirmados o letsencrypt autogenerados no necesitas hacer nada más.

Puedes configurar tu propio certificado como se dijo antes. Sigue esta guía para generar tu custom-xxxxx-chain.pem desde tus certificados.

Certificado Web personalizado

Para crear tu custom-portal-chain.pem (funciona para todos los sabores) tienes que concatenar (en este orden) el certificado del servidor y clave-del-servidor:

cat server-cert.pem server-key.pem > /opt/isard/certs/default/custom-portal-chain.pem

Certificado Web comercial personalizado

En caso de un certificado comercial deberías incluir la cadena intermedia también en el fullchain custom-portal-chain.pem:

# domain.crt:       certificado del dominio
# intermediate.pem: certificado intermedio
# domain.key:       clave privada

cat domain.crt intermediate.pem domain.key > /opt/isard/certs/default/custom-portal-chain.pem

Certificado Web letsencrypt personalizado

En caso de un certificado letsencrypt (no el autogenerado por IsardVDI, uno que solicitaste tú mismo):

cat fullchain.pem privkey.pem > /opt/isard/certs/default/custom-portal-chain.pem

Certificado personalizado para todos los sabores

Todos los sabores de IsardVDI (portal, video, todo-en-uno, hipervisor) usan la misma configuración de certificados. No hay certificado de video separado - todo el tráfico web usa el mismo archivo custom-portal-chain.pem.

Ejemplos con certificados de proveedores

Certificado comercial

Pon tu certificado concatenado con el nombre correcto en /opt/isard/certs/default/ (reemplaza todo lo que ya esté en esa carpeta).

Luego reinicia el contenedor portal (o video).

docker restart isard-portal

Ahora puedes conectar al servidor IsardVDI usando el CN cualificado como se proporciona con tu certificado.

NOTA: Los certificados wildcard también han sido validados con este procedimiento para funcionar como se esperaba. Ver ejemplo abajo:

Ejemplo certificado SSL wildcard

Por ejemplo tienes un certificado comercial wildcard de una empresa (digamos que compraste *.isardvdi.com). Obtendrás estos archivos de tu proveedor de certificados:

  • wildcard_isardvdi_com.crt.pem: Tu certificado wildcard.
  • GandiStandardSSLCA2.pem: Este es el certificado intermedio de la autoridad certificadora (en este ejemplo es gandi.net el proveedor). Siempre puedes obtener este certificado copiando o exportando desde la configuración de certificados de tu navegador o descargándolo desde su página web (ej. wget -q -O - https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem)
  • wildcard_isardvdi_com.key.pem: La clave privada de tu certificado.

Necesitaremos transformar estos archivos en la cadena:

cat wildcard_isardvdi_com.crt.pem GandiStandardSSLCA2.pem wildcard_isardvdi_com.key.pem > /opt/isard/certs/default/chain.pem

Luego reinicia el contenedor portal (o video).

docker restart isard-portal

Resetear certificados

Si reemplazaste certificados y nada funcionó se recomienda empezar el proceso de nuevo reseteando certificados. Si manipulas certificados en la carpeta podría confundir el código de procesamiento de certificados de IsardVDI.

Siempre puedes hacer que tu IsardVDI funcione de nuevo con certificados autofirmados eliminando la carpeta /opt/isard/certs/default. IsardVDI generará y configurará un nuevo certificado autofirmado de nuevo. El procedimiento será:

docker-compose down
rm -rf /opt/isard/certs/default/*
docker-compose up -d

Podrías haber hecho una copia de seguridad de tus certificados autofirmados que funcionaban previamente y ahora también podrías copiar esos en la carpeta de certificados por defecto en lugar de generar nuevos.

Solucionar problemas con certificados

Problemas comunes y soluciones

El certificado no carga/El navegador sigue mostrando auto-firmado

  1. Comprueba que el certificado existe y es válido:

    ls -la /opt/isard/certs/default/
    openssl x509 -in /opt/isard/certs/default/chain.pem -text -noout
    

  2. Reinicia el contenedor portal:

    docker restart isard-portal
    

  3. Comprueba los logs del contenedor:

    docker logs isard-portal
    

La generación del certificado Let's Encrypt ha fallado

  1. Verifica que el dominio apunta a tu servidor:

    nslookup tu-dominio.com
    

  2. Comprueba que los puertos 80/443 son accesibles:

    netstat -tulpn | grep :80
    netstat -tulpn | grep :443
    

  3. Comprueba los logs de Let's Encrypt:

    docker exec isard-portal ls -la /var/log/letsencrypt/
    docker exec isard-portal cat /var/log/letsencrypt/letsencrypt.log
    

Recargas continuas de HAProxy (Arreglado en versiones recientes)

Si experimentas recargas frecuentes de HAProxy, asegúrate de usar la última versión que incluye: - Un solo demonio cron para renovaciones de certificados (no procesos crond duplicados) - Un solo disparador de recarga por operación de certificado (solo recargas basadas en inotify)

Problemas de renovación de certificados

  • Hora de renovación: Los intentos de renovación automática se hacen diariamente a las 2:00 AM
  • Prueba de renovación manual:
    docker exec isard-portal certbot renew --dry-run
    

Restablecimiento de emergencia de certificados

Restablecer a certificados auto-firmados

Si los certificados se corrompen o se vuelven inutilizables:

# Detener IsardVDI
docker-compose down

# Eliminar solo certificados por defecto (HAZ COPIA DE SEGURIDAD PRIMERO si es necesario)
sudo rm -rf /opt/isard/certs/default/*

# Reiniciar - generará nuevos certificados auto-firmados
docker-compose up -d

Restablecer certificados Let's Encrypt

Si los certificados Let's Encrypt han expirado o están corruptos y quieres solicitar nuevos:

# Detener IsardVDI
docker-compose down

# Eliminar tanto certificados por defecto como letsencrypt (HAZ COPIA DE SEGURIDAD PRIMERO si es necesario)
sudo rm -rf /opt/isard/certs/default/*
sudo rm -rf /opt/isard/certs/letsencrypt/*

# Asegúrate de que DOMAIN y LETSENCRYPT_EMAIL están configurados en isardvdi.cfg
# Reiniciar - solicitará nuevos certificados Let's Encrypt
docker-compose up -d

Flujo interno de certificados

Entender cómo funcionan los certificados internamente en IsardVDI:

Pipeline de procesamiento de certificados

  1. Inicio del contenedor (haproxy-docker-entrypoint.sh):
  2. Comprueba si /certs/chain.pem existe y no está vacío
  3. Si falta → activa auto-generate-certs.sh (auto-firmado)
  4. Si presente → usa el certificado existente

  5. Flujo Let's Encrypt (letsencrypt.sh):

  6. Se ejecuta durante la preparación del contenedor si LETSENCRYPT_DOMAIN y LETSENCRYPT_EMAIL están configurados
  7. Usa certbot certonly --standalone en el puerto 80 durante el inicio
  8. Despliega el certificado vía letsencrypt-hook-deploy-concatenante.sh
  9. Crea /etc/environment.letsencrypt para variables de entorno del cron

  10. Despliegue de certificados (letsencrypt-hook-deploy-concatenante.sh):

  11. Concatena fullchain.pem + privkey.pem/certs/chain.pem
  12. Usa operaciones de archivo atómicas (archivo temporal → mover)
  13. Activa la recarga de HAProxy vía monitoreo inotify

  14. Renovación automática (letsencrypt-renew-cron.sh):

  15. Programado diariamente a las 2:00 AM vía cron de Alpine Linux (/etc/periodic/daily/)
  16. Carga variables de entorno de /etc/environment.letsencrypt
  17. Usa certbot renew --http-01-port 8080
  18. Llama automáticamente al hook de despliegue en renovación exitosa

  19. Integración HAProxy:

  20. Terminación SSL: HAProxy se vincula al puerto 8443 con ssl crt /certs/chain.pem
  21. Frontend TCP: El puerto 443 enruta al terminador SSL en 8443
  22. Monitoreo de archivos: inotifyd vigila /certs/chain.pem:c por cambios
  23. Recarga automática: HAProxy se recarga cuando el archivo de certificado cambia

Ubicaciones de archivos y propósitos

Ruta Propósito
/opt/isard/certs/default/chain.pem Certificado primario - auto-generado (autofirmado), Let's Encrypt, o personalizado
/opt/isard/certs/letsencrypt/ Directorio de trabajo de Let's Encrypt (volume mount)
/opt/isard/certs/viewers/ Certificados Spice para hipervisores

⚠️ Importante: Si inicialmente empezaste con certificados autofirmados y quieres cambiar a Let's Encrypt, debes eliminar los certificados existentes primero:

docker-compose down
rm -rf /opt/isard/certs/default/*
# Actualiza tu isardvdi.cfg con DOMAIN y LETSENCRYPT_EMAIL
docker-compose up -d

Orden de prioridad de certificados

  1. Certificado personalizado (custom-portal-chain.pem) - prioridad más alta
  2. Certificado Let's Encrypt (si está configurado y obtenido con éxito)
  3. Certificado auto-firmado (generado automáticamente como fallback)

Por favor consulta la sección admin faq sobre certificados para solución de problemas adicionales.