====== Strategia di rollback ====== **Critico:** Piano e test prima della migrazione in produzione! \\ **Obiettivo:** Ritorno a stato funzionante in caso di problemi Piani e procedure di emergenza per il ritorno alla PKI classica in caso di problemi Hybrid. ---- ===== Scenari di rollback ===== flowchart TD A[Problema rilevato] --> B{Gravità?} B -->|Singolo certificato| C[Rollback singolo] B -->|Più server| D[Rollback servizio] B -->|Problema CA| E[Rollback CA] B -->|Catastrofico| F[Rollback completo] C --> G[Riemettere cert Classic] D --> H[Batch Re-Issue Classic] E --> I[Passare a Classic-CA] F --> J[Disattivare Hybrid-CA] style F fill:#ffebee style E fill:#fff3e0 ---- ===== Prerequisiti ===== **DEVE essere presente prima della migrazione:** | Componente | Descrizione | Posizione | |------------|-------------|-----------| | Classic Root-CA | Backup con chiave | Cassaforte offline | | Classic Intermediate | Backup con chiave | HSM + Backup | | Backup Trust Store | Tutti i client | Config Management | | Backup certificati | Tutti i cert attivi | /backup/certs/ | | Script rollback | Automazione testata | /etc/pki/scripts/ | ---- ===== Livello 1: Singolo certificato ===== **Trigger:** Un server non funziona con certificato Hybrid. #!/bin/bash # rollback-single.sh - Ripristino singolo certificato SERVER="$1" CERT_NAME="$2" if [ -z "$SERVER" ] || [ -z "$CERT_NAME" ]; then echo "Utilizzo: $0 " exit 1 fi echo "Rollback per $SERVER/$CERT_NAME" # 1. Backup certificato Hybrid ssh "$SERVER" "cp /etc/ssl/certs/${CERT_NAME}.pem /etc/ssl/certs/${CERT_NAME}.pem.hybrid-backup" # 2. Ripristinare certificato Classic (se disponibile) if [ -f "/backup/certs/${SERVER}/${CERT_NAME}-classic.pem" ]; then scp "/backup/certs/${SERVER}/${CERT_NAME}-classic.pem" "$SERVER:/etc/ssl/certs/${CERT_NAME}.pem" else # Emettere nuovo con Classic-CA echo "Emissione nuovo certificato Classic..." ssh "$SERVER" "openssl req -new -key /etc/ssl/private/${CERT_NAME}.key -out /tmp/rollback.csr -subj \"/CN=$SERVER\"" scp "$SERVER:/tmp/rollback.csr" "/tmp/rollback-$SERVER.csr" openssl ca -config /etc/pki/classic/openssl.cnf \ -in "/tmp/rollback-$SERVER.csr" \ -out "/tmp/rollback-$SERVER.pem" \ -days 365 -batch scp "/tmp/rollback-$SERVER.pem" "$SERVER:/etc/ssl/certs/${CERT_NAME}.pem" fi # 3. Ricarica servizio ssh "$SERVER" "systemctl reload nginx || systemctl reload apache2" echo "Rollback completato per $SERVER" ---- ===== Livello 2: Rollback servizio ===== **Trigger:** Più server di un servizio interessati. #!/bin/bash # rollback-service.sh - Ripristino tutti i server di un servizio SERVICE="$1" SERVERS_FILE="/etc/pki/inventory/${SERVICE}-servers.txt" if [ ! -f "$SERVERS_FILE" ]; then echo "Lista server non trovata: $SERVERS_FILE" exit 1 fi echo "=== Rollback servizio per $SERVICE ===" echo "Server: $(wc -l < "$SERVERS_FILE")" # Parallelo su tutti i server cat "$SERVERS_FILE" | parallel -j 10 ' echo "Rollback: {}" ./rollback-single.sh {} server-cert ' echo "=== Verifica ===" cat "$SERVERS_FILE" | while read server; do status=$(curl -sk "https://$server/health" 2>/dev/null && echo "OK" || echo "FAIL") echo "$server: $status" done ---- ===== Livello 3: Rollback CA ===== **Trigger:** Problema con certificato CA Hybrid. #!/bin/bash # rollback-ca.sh - Passaggio a Classic-CA echo "=== ROLLBACK CA ===" echo "ATTENZIONE: Questo cambia la CA di firma per tutti i nuovi certificati!" read -p "Continuare? (yes/no): " confirm [ "$confirm" != "yes" ] && exit 1 # 1. Backup configurazione attuale cp /etc/pki/CA/openssl.cnf /etc/pki/CA/openssl.cnf.hybrid-backup cp -r /etc/pki/CA/issued /etc/pki/CA/issued-hybrid-backup # 2. Attivare Classic-CA ln -sf /etc/pki/classic/openssl.cnf /etc/pki/CA/openssl.cnf export CA_CERT=/etc/pki/classic/intermediate-ca.pem export CA_KEY=/etc/pki/classic/intermediate-ca.key # 3. Generare nuova CRL con Classic-CA openssl ca -config /etc/pki/CA/openssl.cnf -gencrl -out /var/www/pki/crl.pem # 4. Riavviare OCSP-Responder (se presente) systemctl restart ocsp-responder # 5. Documentazione echo "$(date -Iseconds) CA-ROLLBACK: Passaggio a Classic-CA" >> /var/log/pki-rollback.log echo "Rollback CA completato." echo "I nuovi certificati saranno firmati con Classic-CA." ---- ===== Livello 4: Rollback completo ===== **Trigger:** Problemi catastrofici con PKI Hybrid. **ATTENZIONE:** Questo disattiva l'intera PKI Hybrid e richiede riemissione di tutti i certificati Hybrid! #!/bin/bash # rollback-complete.sh - Rollback completo a PKI Classic echo "========================================" echo " ROLLBACK PKI COMPLETO" echo "========================================" echo "" echo "ATTENZIONE: Questo:" echo " 1. Revocherà tutti i certificati Hybrid" echo " 2. Passerà tutti i server a Classic" echo " 3. Disattiverà la Hybrid-CA" echo "" read -p "Inserire 'ROLLBACK' per continuare: " confirm [ "$confirm" != "ROLLBACK" ] && exit 1 LOG="/var/log/pki-complete-rollback-$(date +%Y%m%d-%H%M%S).log" exec > >(tee -a "$LOG") 2>&1 echo "Inizio: $(date -Iseconds)" # 1. Identificare tutti i certificati Hybrid echo "=== Fase 1: Inventario ===" find /etc/pki/hybrid/issued -name "*.pem" > /tmp/hybrid-certs.txt echo "Certificati Hybrid: $(wc -l < /tmp/hybrid-certs.txt)" # 2-6. Fasi di riemissione, distribuzione e revoca... # 7. Mettere offline Hybrid-CA echo "=== Fase 6: Disattivazione Hybrid-CA ===" mv /etc/pki/hybrid /etc/pki/hybrid-DISABLED-$(date +%Y%m%d) echo "=== ROLLBACK COMPLETATO ===" echo "Fine: $(date -Iseconds)" echo "Log: $LOG" ---- ===== Procedura test rollback ===== **Testare trimestralmente:** | Passo | Azione | Risultato atteso | |-------|--------|------------------| | 1 | Server test con cert Hybrid | Server funziona | | 2 | Eseguire rollback-single.sh | Server ha cert Classic | | 3 | Testare connessione | TLS funziona | | 4 | Verificare log rollback | Tutti i passi documentati | | 5 | Ripristinare cert Hybrid | Ritorno a Hybrid | ---- ===== Documentazione ===== **Documentare ad ogni rollback:** | Campo | Contenuto | |-------|-----------| | Data/Ora | ISO 8601 | | Motivo | Descrizione problema | | Livello | Single/Service/CA/Complete | | Server interessati | Elenco | | Esecutore | Nome | | Durata | Minuti | | Verifica | OK/Problemi | ---- ===== Checklist ===== | # | Punto di verifica | ✓ | |---|-------------------|---| | 1 | Backup Classic-CA presente | ☐ | | 2 | Script rollback testati | ☐ | | 3 | Inventario server aggiornato | ☐ | | 4 | Backup certificati presenti | ☐ | | 5 | Piano comunicazione presente | ☐ | | 6 | Ultimo test < 90 giorni | ☐ | ---- ===== Documentazione correlata ===== * [[.:classic-to-hybrid|Classic → Hybrid]] – Migrazione * [[..:disaster-recovery:start|Disaster Recovery]] – Guasti maggiori * [[..:tagesgeschaeft:zertifikat-widerrufen|Revoca certificato]] – Revoca singola ---- << [[.:parallel-betrieb|← Funzionamento parallelo]] | [[.:inventur|→ Inventario]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>rollback emergenza disaster-recovery migrazione operator}}