====== Rollback strategija ====== **Kritično:** Planirajte i testirajte prije produkcijske migracije! \\ **Cilj:** Povratak u funkcionalno stanje kod problema Planovi za nuždu i postupci za povratak na klasični PKI kod problema s hibridnim. ---- ===== Scenariji rollbacka ===== flowchart TD A[Problem otkriven] --> B{Ozbiljnost?} B -->|Pojedinačni certifikat| C[Pojedinačni rollback] B -->|Više servera| D[Rollback servisa] B -->|Problem s CA| E[CA rollback] B -->|Katastrofa| F[Potpuni rollback] C --> G[Ponovno izdavanje Classic certifikata] D --> H[Batch Re-Issue Classic] E --> I[Prebacivanje na Classic-CA] F --> J[Deaktivacija Hybrid-CA] style F fill:#ffebee style E fill:#fff3e0 ---- ===== Preduvjeti ===== **MORA postojati prije migracije:** | Komponenta | Opis | Lokacija pohrane | |------------|------|------------------| | Classic Root-CA | Backup s ključem | Offline sef | | Classic Intermediate | Backup s ključem | HSM + Backup | | Trust Store Backup | Svi klijenti | Config Management | | Backup certifikata | Svi aktivni certifikati | /backup/certs/ | | Rollback skripte | Testirana automatizacija | /etc/pki/scripts/ | ---- ===== Razina 1: Pojedinačni certifikat ===== **Okidač:** Jedan server ne funkcionira s hibridnim certifikatom. #!/bin/bash # rollback-single.sh - Vraćanje pojedinačnog certifikata SERVER="$1" CERT_NAME="$2" if [ -z "$SERVER" ] || [ -z "$CERT_NAME" ]; then echo "Usage: $0 " exit 1 fi echo "Rollback za $SERVER/$CERT_NAME" # 1. Backup hibridnog certifikata ssh "$SERVER" "cp /etc/ssl/certs/${CERT_NAME}.pem /etc/ssl/certs/${CERT_NAME}.pem.hybrid-backup" # 2. Vraćanje klasičnog certifikata (ako postoji) 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 # Ponovno izdavanje s Classic-CA echo "Ponovno izdavanje Classic certifikata..." 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. Ponovno učitavanje servisa ssh "$SERVER" "systemctl reload nginx || systemctl reload apache2" # 4. Verifikacija ssh "$SERVER" "openssl s_client -connect localhost:443 -brief" 2>/dev/null | head -5 echo "Rollback završen za $SERVER" ---- ===== Razina 2: Rollback servisa ===== **Okidač:** Više servera jednog servisa pogođeno. #!/bin/bash # rollback-service.sh - Vraćanje svih servera jednog servisa SERVICE="$1" SERVERS_FILE="/etc/pki/inventory/${SERVICE}-servers.txt" if [ ! -f "$SERVERS_FILE" ]; then echo "Lista servera nije pronađena: $SERVERS_FILE" exit 1 fi echo "=== Rollback servisa za $SERVICE ===" echo "Serveri: $(wc -l < "$SERVERS_FILE")" # Paralelno na svim serverima cat "$SERVERS_FILE" | parallel -j 10 ' echo "Rollback: {}" ./rollback-single.sh {} server-cert ' echo "=== Verifikacija ===" cat "$SERVERS_FILE" | while read server; do status=$(curl -sk "https://$server/health" 2>/dev/null && echo "OK" || echo "FAIL") echo "$server: $status" done ---- ===== Razina 3: CA rollback ===== **Okidač:** Problem s Hybrid-CA certifikatom. #!/bin/bash # rollback-ca.sh - Prebacivanje na Classic-CA echo "=== CA-ROLLBACK ===" echo "UPOZORENJE: Ovo mijenja CA za potpisivanje za sve nove certifikate!" read -p "Nastaviti? (yes/no): " confirm [ "$confirm" != "yes" ] && exit 1 # 1. Backup trenutne konfiguracije 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. Aktivacija 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. Generiranje nove CRL s Classic-CA openssl ca -config /etc/pki/CA/openssl.cnf -gencrl -out /var/www/pki/crl.pem # 4. Ponovno pokretanje OCSP respondera (ako postoji) systemctl restart ocsp-responder # 5. Dokumentacija echo "$(date -Iseconds) CA-ROLLBACK: Prebacivanje na Classic-CA" >> /var/log/pki-rollback.log echo "CA-Rollback završen." echo "Novi certifikati će sada biti potpisani s Classic-CA." ---- ===== Razina 4: Potpuni rollback ===== **Okidač:** Katastrofalni problemi s Hybrid-PKI. **PAŽNJA:** Ovo deaktivira cijeli Hybrid-PKI i zahtijeva ponovno izdavanje svih hibridnih certifikata! #!/bin/bash # rollback-complete.sh - Potpuni rollback na Classic-PKI echo "========================================" echo " POTPUNI PKI-ROLLBACK" echo "========================================" echo "" echo "UPOZORENJE: Ovo će:" echo " 1. Opozvati sve hibridne certifikate" echo " 2. Prebaciti sve servere na Classic" echo " 3. Deaktivirati Hybrid-CA" echo "" read -p "Unesite 'ROLLBACK' za nastavak: " 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 "Početak: $(date -Iseconds)" # 1. Identificiranje svih hibridnih certifikata echo "=== Faza 1: Inventura ===" find /etc/pki/hybrid/issued -name "*.pem" > /tmp/hybrid-certs.txt echo "Hibridni certifikati: $(wc -l < /tmp/hybrid-certs.txt)" # 2. Kreiranje liste servera echo "=== Faza 2: Mapiranje servera ===" # (Server → Certifikat mapiranje iz CMDB ili Inventory) # 3. Izdavanje Classic certifikata za sve echo "=== Faza 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" # Ovdje: Izdavanje Classic certifikata done < /tmp/hybrid-certs.txt # 4. Ažuriranje servera echo "=== Faza 4: Deployment ===" # (Paralelni deployment Classic certifikata na sve servere) # 5. Opoziv hibridnih certifikata echo "=== Faza 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. Finalni CRL openssl ca -config /etc/pki/hybrid/openssl.cnf -gencrl -out /var/www/pki/hybrid-final.crl # 7. Offline prebacivanje Hybrid-CA echo "=== Faza 6: Deaktivacija Hybrid-CA ===" mv /etc/pki/hybrid /etc/pki/hybrid-DISABLED-$(date +%Y%m%d) echo "=== ROLLBACK ZAVRŠEN ===" echo "Kraj: $(date -Iseconds)" echo "Log: $LOG" ---- ===== Procedura testiranja rollbacka ===== **Testirati kvartalno:** | Korak | Akcija | Očekivani rezultat | |-------|--------|-------------------| | 1 | Test server s Hybrid certifikatom | Server funkcionira | | 2 | Izvršavanje rollback-single.sh | Server ima Classic certifikat | | 3 | Testiranje veze | TLS funkcionira | | 4 | Provjera rollback loga | Svi koraci dokumentirani | | 5 | Vraćanje Hybrid certifikata | Povratak na Hybrid | # Skripta za testiranje rollbacka #!/bin/bash TEST_SERVER="test-server.example.com" echo "=== Test rollbacka $(date) ===" # Spremanje trenutnog statusa openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/before.txt # Izvršavanje rollbacka ./rollback-single.sh "$TEST_SERVER" server-cert # Provjera novog statusa openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/after.txt # Usporedba echo "Prije:" grep "Signature" /tmp/before.txt echo "Poslije:" grep "Signature" /tmp/after.txt # Vraćanje echo "Vraćanje Hybrid certifikata..." # ... ---- ===== Dokumentacija ===== **Dokumentirati kod svakog rollbacka:** | Polje | Sadržaj | |-------|---------| | Datum/Vrijeme | ISO 8601 | | Razlog | Opis problema | | Razina | Single/Service/CA/Complete | | Pogođeni serveri | Lista | | Izvršitelj | Ime | | Trajanje | Minute | | Verifikacija | OK/Problemi | ---- ===== Kontrolna lista ===== | # | Točka provjere | ✓ | |---|----------------|---| | 1 | Classic-CA backup postoji | ☐ | | 2 | Rollback skripte testirane | ☐ | | 3 | Inventar servera ažuran | ☐ | | 4 | Backupi certifikata postoje | ☐ | | 5 | Komunikacijski plan postoji | ☐ | | 6 | Posljednji test < 90 dana | ☐ | ---- ===== Povezana dokumentacija ===== * [[.:classic-to-hybrid|Classic → Hybrid]] – Migracija * [[..:disaster-recovery:start|Disaster Recovery]] – Veći ispadi * [[..:tagesgeschaeft:zertifikat-widerrufen|Opoziv certifikata]] – Pojedinačni opoziv ---- << [[.:parallel-betrieb|← Paralelni rad]] | [[.:inventur|→ Inventura]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>rollback nužda disaster-recovery migracija operator}}