====== Rollback-Strategie ======
**Kritisch:** Plan und Test vor Production-Migration! \\
**Ziel:** Rückkehr zu funktionierendem Zustand bei Problemen
Notfall-Pläne und Verfahren für die Rückkehr zur klassischen PKI bei Hybrid-Problemen.
----
===== Rollback-Szenarien =====
flowchart TD
A[Problem erkannt] --> B{Schweregrad?}
B -->|Einzelnes Zertifikat| C[Einzelnes Rollback]
B -->|Mehrere Server| D[Service-Rollback]
B -->|CA-Problem| E[CA-Rollback]
B -->|Katastrophe| F[Komplettes Rollback]
C --> G[Classic-Cert neu ausstellen]
D --> H[Batch-Re-Issue Classic]
E --> I[Auf Classic-CA wechseln]
F --> J[Hybrid-CA deaktivieren]
style F fill:#ffebee
style E fill:#fff3e0
----
===== Voraussetzungen =====
**MUSS vor Migration vorhanden sein:**
| Komponente | Beschreibung | Speicherort |
|------------|--------------|-------------|
| Classic Root-CA | Backup mit Key | Offline-Safe |
| Classic Intermediate | Backup mit Key | HSM + Backup |
| Trust Store Backup | Alle Clients | Config Management |
| Zertifikats-Backup | Alle aktiven Certs | /backup/certs/ |
| Rollback-Scripts | Getestete Automation | /etc/pki/scripts/ |
----
===== Level 1: Einzelnes Zertifikat =====
**Trigger:** Ein Server funktioniert nicht mit Hybrid-Zertifikat.
#!/bin/bash
# rollback-single.sh - Einzelnes Zertifikat zurücksetzen
SERVER="$1"
CERT_NAME="$2"
if [ -z "$SERVER" ] || [ -z "$CERT_NAME" ]; then
echo "Usage: $0 "
exit 1
fi
echo "Rollback für $SERVER/$CERT_NAME"
# 1. Backup des Hybrid-Zertifikats
ssh "$SERVER" "cp /etc/ssl/certs/${CERT_NAME}.pem /etc/ssl/certs/${CERT_NAME}.pem.hybrid-backup"
# 2. Classic-Zertifikat wiederherstellen (falls vorhanden)
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
# Neu ausstellen mit Classic-CA
echo "Stelle Classic-Zertifikat neu aus..."
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. Service neuladen
ssh "$SERVER" "systemctl reload nginx || systemctl reload apache2"
# 4. Verifizieren
ssh "$SERVER" "openssl s_client -connect localhost:443 -brief" 2>/dev/null | head -5
echo "Rollback abgeschlossen für $SERVER"
----
===== Level 2: Service-Rollback =====
**Trigger:** Mehrere Server eines Services betroffen.
#!/bin/bash
# rollback-service.sh - Alle Server eines Services zurücksetzen
SERVICE="$1"
SERVERS_FILE="/etc/pki/inventory/${SERVICE}-servers.txt"
if [ ! -f "$SERVERS_FILE" ]; then
echo "Server-Liste nicht gefunden: $SERVERS_FILE"
exit 1
fi
echo "=== Service-Rollback für $SERVICE ==="
echo "Server: $(wc -l < "$SERVERS_FILE")"
# Parallel auf allen Servern
cat "$SERVERS_FILE" | parallel -j 10 '
echo "Rollback: {}"
./rollback-single.sh {} server-cert
'
echo "=== Verifizierung ==="
cat "$SERVERS_FILE" | while read server; do
status=$(curl -sk "https://$server/health" 2>/dev/null && echo "OK" || echo "FAIL")
echo "$server: $status"
done
----
===== Level 3: CA-Rollback =====
**Trigger:** Hybrid-CA-Zertifikat hat Problem.
#!/bin/bash
# rollback-ca.sh - Auf Classic-CA zurückwechseln
echo "=== CA-ROLLBACK ==="
echo "WARNUNG: Dies wechselt die Signing-CA für alle neuen Zertifikate!"
read -p "Fortfahren? (yes/no): " confirm
[ "$confirm" != "yes" ] && exit 1
# 1. Backup aktuelle Konfiguration
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. Classic-CA aktivieren
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. Neue CRL mit Classic-CA generieren
openssl ca -config /etc/pki/CA/openssl.cnf -gencrl -out /var/www/pki/crl.pem
# 4. OCSP-Responder neustarten (falls vorhanden)
systemctl restart ocsp-responder
# 5. Dokumentation
echo "$(date -Iseconds) CA-ROLLBACK: Wechsel zu Classic-CA" >> /var/log/pki-rollback.log
echo "CA-Rollback abgeschlossen."
echo "Neue Zertifikate werden jetzt mit Classic-CA signiert."
----
===== Level 4: Komplettes Rollback =====
**Trigger:** Katastrophale Probleme mit Hybrid-PKI.
**ACHTUNG:** Dies deaktiviert die gesamte Hybrid-PKI und erfordert Re-Issue aller Hybrid-Zertifikate!
#!/bin/bash
# rollback-complete.sh - Komplettes Rollback zur Classic-PKI
echo "========================================"
echo " KOMPLETTES PKI-ROLLBACK"
echo "========================================"
echo ""
echo "WARNUNG: Dies wird:"
echo " 1. Alle Hybrid-Zertifikate widerrufen"
echo " 2. Alle Server auf Classic umstellen"
echo " 3. Die Hybrid-CA deaktivieren"
echo ""
read -p "Geben Sie 'ROLLBACK' ein um fortzufahren: " 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 "Start: $(date -Iseconds)"
# 1. Alle Hybrid-Zertifikate identifizieren
echo "=== Phase 1: Inventur ==="
find /etc/pki/hybrid/issued -name "*.pem" > /tmp/hybrid-certs.txt
echo "Hybrid-Zertifikate: $(wc -l < /tmp/hybrid-certs.txt)"
# 2. Server-Liste erstellen
echo "=== Phase 2: Server-Mapping ==="
# (Server → Zertifikat Mapping aus CMDB oder Inventory)
# 3. Classic-Zertifikate für alle ausstellen
echo "=== Phase 3: Classic Re-Issue ==="
while read cert; do
serial=$(openssl x509 -in "$cert" -serial -noout | cut -d= -f2)
subject=$(openssl x509 -in "$cert" -subject -noout | sed 's/subject=//')
echo "Re-Issue: $subject"
# Hier: Classic-Zertifikat ausstellen
done < /tmp/hybrid-certs.txt
# 4. Server aktualisieren
echo "=== Phase 4: Deployment ==="
# (Parallel auf allen Servern Classic-Certs deployen)
# 5. Hybrid-Zertifikate widerrufen
echo "=== Phase 5: Revocation ==="
while read cert; do
openssl ca -config /etc/pki/hybrid/openssl.cnf -revoke "$cert" -crl_reason superseded
done < /tmp/hybrid-certs.txt
# 6. Finale CRL
openssl ca -config /etc/pki/hybrid/openssl.cnf -gencrl -out /var/www/pki/hybrid-final.crl
# 7. Hybrid-CA offline nehmen
echo "=== Phase 6: Hybrid-CA Deaktivierung ==="
mv /etc/pki/hybrid /etc/pki/hybrid-DISABLED-$(date +%Y%m%d)
echo "=== ROLLBACK ABGESCHLOSSEN ==="
echo "Ende: $(date -Iseconds)"
echo "Log: $LOG"
----
===== Rollback-Test-Prozedur =====
**Quartalsweise testen:**
| Schritt | Aktion | Erwartetes Ergebnis |
|---------|--------|---------------------|
| 1 | Test-Server mit Hybrid-Cert | Server funktioniert |
| 2 | rollback-single.sh ausführen | Server hat Classic-Cert |
| 3 | Verbindung testen | TLS funktioniert |
| 4 | Rollback-Log prüfen | Alle Schritte dokumentiert |
| 5 | Hybrid-Cert wiederherstellen | Zurück zu Hybrid |
# Rollback-Test Script
#!/bin/bash
TEST_SERVER="test-server.example.com"
echo "=== Rollback-Test $(date) ==="
# Aktuellen Status speichern
openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/before.txt
# Rollback ausführen
./rollback-single.sh "$TEST_SERVER" server-cert
# Neuen Status prüfen
openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/after.txt
# Vergleich
echo "Vorher:"
grep "Signature" /tmp/before.txt
echo "Nachher:"
grep "Signature" /tmp/after.txt
# Wiederherstellen
echo "Stelle Hybrid wieder her..."
# ...
----
===== Dokumentation =====
**Bei jedem Rollback dokumentieren:**
| Feld | Inhalt |
|------|--------|
| Datum/Uhrzeit | ISO 8601 |
| Grund | Problembeschreibung |
| Level | Single/Service/CA/Complete |
| Betroffene Server | Liste |
| Durchführender | Name |
| Dauer | Minuten |
| Verifizierung | OK/Probleme |
----
===== Checkliste =====
| # | Prüfpunkt | ✓ |
|---|-----------|---|
| 1 | Classic-CA Backup vorhanden | ☐ |
| 2 | Rollback-Scripts getestet | ☐ |
| 3 | Server-Inventar aktuell | ☐ |
| 4 | Zertifikats-Backups vorhanden | ☐ |
| 5 | Kommunikationsplan vorhanden | ☐ |
| 6 | Letzter Test < 90 Tage | ☐ |
----
===== Verwandte Dokumentation =====
* [[.:classic-to-hybrid|Classic → Hybrid]] – Migration
* [[..:disaster-recovery:start|Disaster Recovery]] – Größere Ausfälle
* [[..:tagesgeschaeft:zertifikat-widerrufen|Zertifikat widerrufen]] – Einzelne Revocation
----
<< [[.:parallel-betrieb|← Parallel-Betrieb]] | [[.:inventur|→ Inventur]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>rollback notfall disaster-recovery migration operator}}