Déploiement Docker

Guide de déploiement de PKI Trust Manager avec Docker : prérequis, configuration, licence, vérification, maintenance et sécurité.

La nouvelle génération de PKI Trust Manager de Securetron simplifie la gestion des certificats, notamment TLS, PQC, ADCS / MS CA, AWS CA, Azure Vault et bien d’autres. La découverte intelligente des certificats et le service de notification avancée intégrés fournissent gouvernance et automatisation avec SCEP, EST et ACME, et contribuent à prévenir les interruptions en automatisant les renouvellements.

Pour plus d’informations : https://securetron.net

Guide de déploiement de PKI Trust Manager sur Docker

Sommaire#

  1. Prérequis
  2. Configuration système requise
  3. Vue d’ensemble de l’architecture
  4. Instructions d’installation
  5. Configuration
  6. Variables d’environnement
  7. Configuration Nginx
  8. Configuration de licence
  9. Étapes de déploiement
  10. Vérification et tests
  11. Dépannage
  12. Maintenance

Prérequis#

Logiciels requis#

  • Docker Engine 20.10.0 ou version ultérieure
  • Docker Compose 2.0.0 ou version ultérieure
  • Git pour le contrôle de version
  • Certificats SSL/TLS (pour un déploiement en production)

Accès requis#

  • Accès à Docker Hub/Registry pour récupérer les images
  • Outils client SQL Server (facultatifs, pour l’administration de la base de données)
  • Accès administrateur au serveur de déploiement

Exigences réseau#

  • Ports ouverts : 1433 (SQL), 5053 (interface Web), 443 (HTTPS)
  • Accès SMTP sortant (port 2525 ou port SMTP utilisé)
  • Résolution DNS des noms d’hôte de service

Configuration système requise#

Configuration matérielle minimale#

  • CPU : 4 cœurs (architecture x64)
  • RAM : 8 Go minimum, 16 Go recommandés
  • Stockage : 50 Go d’espace libre (SSD recommandé)
  • Réseau : interface réseau 1 Gbps

Configuration recommandée pour la production#

  • CPU : 8 cœurs ou plus
  • RAM : 32 Go
  • Stockage : 200 Go ou plus avec configuration RAID
  • Sauvegardes : stratégie de sauvegarde régulière des volumes

Vue d’ensemble de l’architecture#

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

Instructions d’installation#

1. Cloner/préparer le répertoire de déploiement#

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

2. Créer l’arborescence des répertoires#

mkdir -p {certs,license,config}

3. Créer le fichier Docker Compose#

Créez docker-compose.yaml avec la configuration fournie :

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

4. Créer le fichier d’environnement#

Créez le fichier .env pour les variables d’environnement :

Avertissement de sécurité : les mots de passe et clés de cet exemple sont des valeurs fictives. Remplacez-les par des valeurs uniques et robustes avant la mise en production ; ne réutilisez ni ne publiez de véritables identifiants.

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

Configuration#

Configuration des certificats SSL/TLS#

  1. Placez vos certificats SSL dans le répertoire certs/ :
# Certificate files
certs/
├── cert.crt # SSL Certificate
└── key.pem # Private Key
  1. Pour les tests, générez des certificats autosignés :
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"

Configuration Nginx#

Créez 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 d’environnement#

Variables de sécurité critiques#

VariableDescriptionValeur par défautObligatoire
SQL_SA_PASSWORDMot de passe SA SQL ServerPKI_Strong@Pass123Oui
ADMIN_PASSWORDMot de passe du superadministrateurhappyOui
SMTP_PASSWORDMot de passe d’authentification SMTP-Oui
LICENSE_API_KEYClé API du serveur de licences-Oui
LICENSE_PUBLIC_KEYClé publique de validation des licences-Oui

Configuration de la base de données#

  • Vérifiez que SQL_SA_PASSWORD respecte les exigences de complexité.
  • Modifiez les mots de passe par défaut avant le déploiement en production.
  • Envisagez l’utilisation de Docker secrets en production.
  • Pour MSSQL en production, utilisez BYOL ou votre propre serveur MSSQL.

Configuration du courrier électronique#

  • Configurez des identifiants SMTP valides.
  • Définissez une adresse d’expéditeur appropriée.
  • Testez l’envoi des courriels après le déploiement.

Configuration de licence#

  1. Obtenez les fichiers de licence auprès de Securetron (https://securetron.net/contact/).
  2. Placez les fichiers de licence dans le répertoire license/ :
license/
├── product.lic
└── validation.key
  1. Configurez les paramètres de licence dans .env :
    • Définissez LICENSE_OFFLINE_MODE=true pour les environnements isolés (air-gapped).
    • Définissez LICENSE_ONLINE_VALIDATION=true pour les déploiements cloud.
    • Contactez Securetron pour obtenir LICENSE_API_KEY et LICENSE_PUBLIC_KEY.

Étapes de déploiement#

1. Déploiement initial#

# 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. Vérifier le déploiement#

# 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. Configuration initiale#

  1. Accédez à l’interface Web : https://your-server-domain.
  2. Connectez-vous avec les identifiants du superadministrateur définis dans .env.
  3. Terminez la configuration initiale :
    • Configurez les paramètres de l’organisation.
    • Configurez les autorités de certification.
    • Configurez les modèles de notification.
    • Ajoutez les comptes utilisateurs.

Vérification et tests#

Contrôles d’état#

# 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

Tests fonctionnels#

  1. Authentification utilisateur : connectez-vous avec les identifiants d’administration.
  2. Opérations sur les certificats : émettez un certificat de test.
  3. Notifications par e-mail : déclenchez une notification de test.
  4. Protocole SCEP : testez l’enrôlement SCEP (s’il est configuré).
  5. Sauvegarde/restauration : testez la sauvegarde de la base de données.

Dépannage#

Problèmes courants#

1. Problèmes de connexion à SQL Server

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

2. L’application Web ne démarre pas

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

3. Problèmes SSL/TLS

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

4. Échec de validation de licence

  • Vérifiez la présence des fichiers de licence dans license/.
  • Vérifiez la connectivité réseau au serveur de licences.
  • Vérifiez les dates d’expiration de la licence.

Emplacement des journaux#

  • Journaux de l’application : journaux du conteneur (docker-compose logs cmsweb)
  • Journaux de la base de données : journaux du conteneur (docker-compose logs sqlserver)
  • Journaux Nginx : journaux du conteneur (docker-compose logs nginx)
  • Journaux Docker : journalctl -u docker.service

Maintenance#

Procédures de sauvegarde#

# 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/

Procédures de mise à jour#

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

Surveillance#

  1. Surveillance des ressources : CPU, mémoire et espace disque.
  2. Expiration des certificats : surveillez les périodes de validité.
  3. Journaux de l’application : recherchez régulièrement les erreurs.
  4. Taille de la base de données : surveillez sa croissance.

Renforcement de la sécurité#

  1. Mises à jour régulières : maintenez Docker et les images à jour.
  2. Rotation des mots de passe : renouvelez les mots de passe régulièrement.
  3. Contrôle d’accès : limitez l’accès au répertoire de déploiement.
  4. Sécurité réseau : configurez correctement les règles du pare-feu.
  5. Journaux d’audit : activez et surveillez les traces d’audit.
  6. MFA utilisateur : utilisez le MFA TOTP intégré ou Enterprise SSO (SAML / OpenID).

Assistance#

Pour obtenir une assistance technique :

  1. Documentation : https://securetron.net/documentation
  2. Portail d’assistance : https://securetron.net
  3. Contact d’urgence : [email protected]

Remarque : ce guide concerne PKI Trust Manager version 2.x. Consultez toujours la documentation officielle pour les instructions propres à chaque version.