Despliegue de Docker

Guía de despliegue de PKI Trust Manager con Docker: requisitos, configuración, licencia, comprobación, mantenimiento y seguridad.

PKI Trust Manager de nueva generación de Securetron simplifica la gestión de certificados, incluidos TLS, PQC, ADCS / MS CA, AWS CA, Azure Vault y muchos más. Incorpora descubrimiento inteligente de certificados y un servicio avanzado de notificaciones; ofrece gobernanza y automatización mediante SCEP, EST y ACME para ayudar a prevenir interrupciones automatizando las renovaciones.

Más información: https://securetron.net

Guía de despliegue de PKI Trust Manager en Docker

Índice#

  1. Requisitos previos
  2. Requisitos del sistema
  3. Descripción de la arquitectura
  4. Instrucciones de configuración
  5. Configuración
  6. Variables de entorno
  7. Configuración de Nginx
  8. Configuración de licencia
  9. Pasos de despliegue
  10. Verificación y pruebas
  11. Solución de problemas
  12. Mantenimiento

Requisitos previos#

Requisitos de software#

  • Docker Engine 20.10.0 o posterior
  • Docker Compose 2.0.0 o posterior
  • Git para el control de versiones
  • Certificados SSL/TLS (para despliegues de producción)

Requisitos de acceso#

  • Acceso a Docker Hub/Registry para descargar imágenes
  • Herramientas cliente de SQL Server (opcional, para administrar la base de datos)
  • Acceso administrativo al servidor de despliegue

Requisitos de red#

  • Puertos abiertos: 1433 (SQL), 5053 (interfaz web), 443 (HTTPS)
  • Acceso SMTP saliente (puerto 2525 o el puerto de su servidor SMTP)
  • Resolución DNS para los nombres de host de los servicios

Requisitos del sistema#

Hardware mínimo#

  • CPU: 4 núcleos (arquitectura x64)
  • RAM: 8 GB como mínimo; 16 GB recomendados
  • Almacenamiento: 50 GB de espacio libre (se recomienda SSD)
  • Red: interfaz de red de 1 Gbps

Especificaciones recomendadas para producción#

  • CPU: 8 o más núcleos
  • RAM: 32 GB
  • Almacenamiento: 200 GB o más con configuración RAID
  • Copias de seguridad: estrategia periódica para los volúmenes

Descripción de la arquitectura#

┌─────────────────────────────────────────────────────────────┐
│ PKI Trust Manager Stack                                     │
├─────────────────┬─────────────────┬─────────────────────────┤
│ Nginx Proxy     │ Web UI (CMS)    │ SQL Server              │
│ (SSL/TLS)       │ Port: 5228      │ Port: 1433              │
│ Port: 443       │                 │                         │
└─────────────────┴─────────────────┴─────────────────────────┘
 │                 │                 │
 └────────────────┼──────────────────┘
                  │
       Application Bridge Network

Instrucciones de configuración#

1. Clonar/preparar el directorio de despliegue#

mkdir -p /opt/pki-trust-manager
cd /opt/pki-trust-manager

2. Crear la estructura de directorios#

mkdir -p {certs,license,config}

3. Crear el archivo Docker Compose#

Cree docker-compose.yaml con la configuración proporcionada:

cat > docker-compose.yaml << 'EOF'
[PASTE PROVIDED DOCKER-COMPOSE.YAML CONTENT HERE]
EOF

4. Crear el archivo de entorno#

Cree el archivo .env para las variables de entorno:

Advertencia de seguridad: los valores de contraseña y clave de este ejemplo son marcadores de posición. Sustitúyalos por valores únicos y seguros antes de producción; no reutilice ni publique credenciales reales.

cat >.env << 'EOF'
# Database Configuration
SQL_SA_PASSWORD=YourStrong@Password123
SQL_DATABASE=PKIDBEE
SQL_PORT=1433
 
# Web Application
PKIMAIN_TAG=latest
CMSWEB_PORT=5053
ENV_MODE=Cloud
TRUST_LEVEL=Public
 
# Admin Configuration
ADMIN_USERNAME=superadmin
ADMIN_PASSWORD=YourAdminPass123!
[email protected]
 
# Authentication
LOGIN_VALIDITY=15
OTP_NAME=PKI-Trust-Manager
EMAIL_VERIFICATION=true
 
# Email/SMTP Configuration
SMTP_SERVER=mail.smtp2go.com
SMTP_PORT=2525
SMTP_AUTH=true
SMTP_SSL=true
SMTP_USERNAME=your_smtp_username
SMTP_PASSWORD=your_smtp_password
SMTP_SENDER_NAME="PKI Trust Manager"
[email protected]
 
# Certificate Expiry Settings
EXPIRY_START_RANGE=30
EXPIRY_END_RANGE=3
EXPIRY_NOTIFY_INTERVAL=1
EXPIRY_SCAN_INTERVAL=30
 
# SCEP Configuration
SCEP_OTP_VALIDITY=525600
 
# Licensing (Contact Securetron for these values)
LICENSE_SERVER_URL=http://localhost:7001
LICENSE_API_KEY=your_license_api_key
CMSWEB_CLIENT_ID=webcore-001
LICENSE_OFFLINE_MODE=true
LICENSE_ONLINE_VALIDATION=false
LICENSE_PUBLIC_KEY=your_public_key_here
 
# Logging
LOG_LEVEL=Information
LOG_LEVEL_MS=Warning
 
# Nginx
NGINX_HTTPS_PORT=443
EOF

Configuración#

Configuración de certificados SSL/TLS#

  1. Coloque los certificados SSL en el directorio certs/:
# Certificate files
certs/
├── cert.crt # SSL Certificate
└── key.pem # Private Key
  1. Para pruebas, genere certificados autofirmados:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
  -keyout certs/key.pem \
  -out certs/cert.crt \
  -subj "/C=US/ST=State/L=City/O=Organization/CN=pki.yourdomain.com"

Configuración de Nginx#

Cree nginx.conf:

events {
  worker_connections 1024;
}
 
http {
  upstream pki_web {
    server cmsweb.local:5228;
  }
 
  server {
    listen 443 ssl http2;
    server_name pki.yourdomain.com;
 
    ssl_certificate /etc/nginx/cert.crt;
    ssl_certificate_key /etc/nginx/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
 
    # Security headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-XSS-Protection "1; mode=block" always;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
 
    location / {
      proxy_pass http://pki_web;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
 
      proxy_buffer_size 128k;
      proxy_buffers 4 256k;
      proxy_busy_buffers_size 256k;
    }
 
    # Health check endpoint
    location /health {
      proxy_pass http://pki_web/health;
      access_log off;
    }
  }
}

Variables de entorno#

Variables de seguridad críticas#

VariableDescripciónValor predeterminadoObligatoria
SQL_SA_PASSWORDContraseña SA de SQL ServerPKI_Strong@Pass123Sí
ADMIN_PASSWORDContraseña del superadministradorhappySí
SMTP_PASSWORDContraseña de autenticación SMTP-Sí
LICENSE_API_KEYClave API del servidor de licencias-Sí
LICENSE_PUBLIC_KEYClave pública para validar licencias-Sí

Configuración de la base de datos#

  • Asegúrese de que SQL_SA_PASSWORD cumpla los requisitos de complejidad.
  • Cambie las contraseñas predeterminadas antes del despliegue de producción.
  • Considere utilizar Docker secrets en producción.
  • Para MSSQL en producción, utilice BYOL o su propio servidor MSSQL.

Configuración del correo electrónico#

  • Configure credenciales SMTP válidas.
  • Establezca una dirección de remitente adecuada.
  • Pruebe el correo después del despliegue.

Configuración de licencia#

  1. Obtenga los archivos de licencia de Securetron (https://securetron.net/contact/).
  2. Coloque los archivos de licencia en el directorio license/:
license/
├── product.lic
└── validation.key
  1. Configure los parámetros de licencia en .env:
    • Establezca LICENSE_OFFLINE_MODE=true en entornos aislados (air-gapped).
    • Establezca LICENSE_ONLINE_VALIDATION=true para despliegues en la nube.
    • Póngase en contacto con Securetron para obtener LICENSE_API_KEY y LICENSE_PUBLIC_KEY.

Pasos de despliegue#

1. Despliegue inicial#

# Set proper permissions
chmod 600 certs/key.pem
chmod 644 certs/cert.crt
 
# Pull images
docker-compose pull
 
# Start services
docker-compose up -d
 
# View logs
docker-compose logs -f

2. Verificar el despliegue#

# Check container status
docker-compose ps
 
# Check SQL Server health
docker exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa \
  -P "${SQL_SA_PASSWORD}" \
  -Q "SELECT name FROM sys.databases"
 
# Check web application
curl -k https://localhost/health

3. Configuración inicial#

  1. Acceda a la interfaz web: https://your-server-domain.
  2. Inicie sesión con las credenciales de superadministrador del archivo .env.
  3. Complete la configuración inicial:
    • Configure los ajustes de la organización.
    • Configure las autoridades de certificación.
    • Configure las plantillas de notificación.
    • Añada cuentas de usuario.

Verificación y pruebas#

Comprobaciones de estado#

# Database health
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "${SQL_SA_PASSWORD}" \
  -Q "SELECT 1"
 
# Application health
curl -f https://localhost/health
 
# SSL verification
openssl s_client -connect localhost:443 -servername pki.yourdomain.com

Pruebas funcionales#

  1. Autenticación de usuarios: inicie sesión con las credenciales de administrador.
  2. Operaciones con certificados: emita un certificado de prueba.
  3. Notificaciones por correo: active una notificación de prueba.
  4. Protocolo SCEP: pruebe la inscripción SCEP (si está configurada).
  5. Copia de seguridad/restauración: pruebe la función de respaldo de la base de datos.

Solución de problemas#

Problemas comunes#

1. Problemas de conexión a SQL Server

# Check SQL Server logs
docker-compose logs sqlserver
 
# Verify network connectivity between containers
docker-compose exec cmsweb ping sqlserver.local

2. La aplicación web no se inicia

# Check application logs
docker-compose logs cmsweb
 
# Verify environment variables
docker-compose exec cmsweb env | grep ConnectionStrings

3. Problemas de SSL/TLS

# Verify certificate permissions
ls -la certs/
 
# Test Nginx configuration
docker-compose exec nginx nginx -t

4. Fallos en la validación de licencia

  • Verifique los archivos de licencia del directorio license/.
  • Compruebe la conectividad de red con el servidor de licencias.
  • Valide las fechas de expiración de la licencia.

Ubicación de registros#

  • Registros de la aplicación: registros del contenedor (docker-compose logs cmsweb)
  • Registros de la base de datos: registros del contenedor (docker-compose logs sqlserver)
  • Registros de Nginx: registros del contenedor (docker-compose logs nginx)
  • Registros de Docker: journalctl -u docker.service

Mantenimiento#

Procedimientos de copia de seguridad#

# Database backup
docker-compose exec sqlserver /opt/mssql-tools18/bin/sqlcmd \
  -S localhost -U sa -P "${SQL_SA_PASSWORD}" \
  -Q "BACKUP DATABASE [${SQL_DATABASE}] TO DISK='/var/opt/mssql/backup/$(date +%Y%m%d).bak'"
 
# Configuration backup
tar czf pki-backup-$(date +%Y%m%d).tar.gz \
  docker-compose.yaml .env nginx.conf certs/ license/

Procedimientos de actualización#

# Pull latest images
docker-compose pull
 
# Restart services
docker-compose up -d
 
# Cleanup old images
docker image prune -f

Supervisión#

  1. Supervisión de recursos: CPU, memoria y uso del disco.
  2. Expiración de certificados: supervise los periodos de validez.
  3. Registros de la aplicación: revise periódicamente si hay errores.
  4. Tamaño de la base de datos: supervise su crecimiento.

Refuerzo de seguridad#

  1. Actualizaciones periódicas: mantenga Docker e imágenes actualizados.
  2. Rotación de contraseñas: cambie las contraseñas periódicamente.
  3. Control de acceso: restrinja el acceso al directorio de despliegue.
  4. Seguridad de red: configure adecuadamente las reglas del firewall.
  5. Registros de auditoría: habilite y supervise los registros de auditoría.
  6. MFA de usuarios: utilice TOTP MFA integrado o Enterprise SSO (SAML / OpenID).

Soporte#

Para obtener soporte técnico:

  1. Documentación: https://securetron.net/documentation
  2. Portal de soporte: https://securetron.net
  3. Contacto de emergencia: [email protected]

Nota: Esta guía de despliegue corresponde a PKI Trust Manager 2.x. Consulte siempre la documentación oficial para obtener instrucciones específicas de cada versión.