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