====== 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}}