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