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:
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):
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).
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).
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á:
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¶
-
Comprueba que el certificado existe y es válido:
-
Reinicia el contenedor portal:
-
Comprueba los logs del contenedor:
La generación del certificado Let's Encrypt ha fallado¶
-
Verifica que el dominio apunta a tu servidor:
-
Comprueba que los puertos 80/443 son accesibles:
-
Comprueba los logs de Let's Encrypt:
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:
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¶
- Inicio del contenedor (
haproxy-docker-entrypoint.sh): - Comprueba si
/certs/chain.pemexiste y no está vacío - Si falta → activa
auto-generate-certs.sh(auto-firmado) -
Si presente → usa el certificado existente
-
Flujo Let's Encrypt (
letsencrypt.sh): - Se ejecuta durante la preparación del contenedor si
LETSENCRYPT_DOMAINyLETSENCRYPT_EMAILestán configurados - Usa
certbot certonly --standaloneen el puerto 80 durante el inicio - Despliega el certificado vía
letsencrypt-hook-deploy-concatenante.sh -
Crea
/etc/environment.letsencryptpara variables de entorno del cron -
Despliegue de certificados (
letsencrypt-hook-deploy-concatenante.sh): - Concatena
fullchain.pem+privkey.pem→/certs/chain.pem - Usa operaciones de archivo atómicas (archivo temporal → mover)
-
Activa la recarga de HAProxy vía monitoreo inotify
-
Renovación automática (
letsencrypt-renew-cron.sh): - Programado diariamente a las 2:00 AM vía cron de Alpine Linux (
/etc/periodic/daily/) - Carga variables de entorno de
/etc/environment.letsencrypt - Usa
certbot renew --http-01-port 8080 -
Llama automáticamente al hook de despliegue en renovación exitosa
-
Integración HAProxy:
- Terminación SSL: HAProxy se vincula al puerto 8443 con
ssl crt /certs/chain.pem - Frontend TCP: El puerto 443 enruta al terminador SSL en 8443
- Monitoreo de archivos:
inotifydvigila/certs/chain.pem:cpor cambios - 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¶
- Certificado personalizado (
custom-portal-chain.pem) - prioridad más alta - Certificado Let's Encrypt (si está configurado y obtenido con éxito)
- Certificado auto-firmado (generado automáticamente como fallback)
Por favor consulta la sección admin faq sobre certificados para solución de problemas adicionales.