Inhaltsverzeichnis
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 <server> <cert-name>" 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 → Hybrid – Migration
- Disaster Recovery – Größere Ausfälle
- Zertifikat widerrufen – Einzelne Revocation
« ← Parallel-Betrieb | → Inventur »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional
Zuletzt geändert: den 29.01.2026 um 15:13