====== Strategija povrnitve ======
**Kritično:** Načrt in test pred produkcijsko migracijo! \\
**Cilj:** Vrnitev v delujoče stanje ob težavah
Načrti v sili in postopki za vrnitev na klasični PKI ob hibridnih težavah.
----
===== Scenariji povrnitve =====
flowchart TD
A[Zaznana težava] --> B{Resnost?}
B -->|Posamezen certifikat| C[Posamezna povrnitev]
B -->|Več strežnikov| D[Storitvena povrnitev]
B -->|Težava CA| E[CA povrnitev]
B -->|Katastrofa| F[Popolna povrnitev]
C --> G[Ponovna izdaja klasičnega cert.]
D --> H[Skupinska ponovna izdaja klasičnega]
E --> I[Preklop na klasični CA]
F --> J[Deaktivacija hibridnega CA]
style F fill:#ffebee
style E fill:#fff3e0
----
===== Predpogoji =====
**MORA biti prisotno pred migracijo:**
| Komponenta | Opis | Lokacija shranjevanja |
|------------|------|----------------------|
| Klasični Root-CA | Varnostna kopija s ključem | Sef brez povezave |
| Klasični Intermediate | Varnostna kopija s ključem | HSM + varnostna kopija |
| Varnostna kopija shrambe zaupanja | Vsi odjemalci | Upravljanje konfiguracij |
| Varnostna kopija certifikatov | Vsi aktivni cert. | /backup/certs/ |
| Skripte za povrnitev | Testirana avtomatizacija | /etc/pki/scripts/ |
----
===== Nivo 1: Posamezen certifikat =====
**Sprožilec:** En strežnik ne deluje s hibridnim certifikatom.
#!/bin/bash
# rollback-single.sh - Povrnitev posameznega certifikata
SERVER="$1"
CERT_NAME="$2"
if [ -z "$SERVER" ] || [ -z "$CERT_NAME" ]; then
echo "Uporaba: $0 "
exit 1
fi
echo "Povrnitev za $SERVER/$CERT_NAME"
# 1. Varnostna kopija hibridnega certifikata
ssh "$SERVER" "cp /etc/ssl/certs/${CERT_NAME}.pem /etc/ssl/certs/${CERT_NAME}.pem.hybrid-backup"
# 2. Obnovitev klasičnega certifikata (če obstaja)
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
# Ponovna izdaja s klasičnim CA
echo "Izdajam klasični certifikat na novo..."
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. Ponovni zagon storitve
ssh "$SERVER" "systemctl reload nginx || systemctl reload apache2"
# 4. Preverjanje
ssh "$SERVER" "openssl s_client -connect localhost:443 -brief" 2>/dev/null | head -5
echo "Povrnitev končana za $SERVER"
----
===== Nivo 2: Storitvena povrnitev =====
**Sprožilec:** Prizadetih več strežnikov storitve.
#!/bin/bash
# rollback-service.sh - Povrnitev vseh strežnikov storitve
SERVICE="$1"
SERVERS_FILE="/etc/pki/inventory/${SERVICE}-servers.txt"
if [ ! -f "$SERVERS_FILE" ]; then
echo "Seznam strežnikov ni najden: $SERVERS_FILE"
exit 1
fi
echo "=== Storitvena povrnitev za $SERVICE ==="
echo "Strežniki: $(wc -l < "$SERVERS_FILE")"
# Vzporedno na vseh strežnikih
cat "$SERVERS_FILE" | parallel -j 10 '
echo "Povrnitev: {}"
./rollback-single.sh {} server-cert
'
echo "=== Preverjanje ==="
cat "$SERVERS_FILE" | while read server; do
status=$(curl -sk "https://$server/health" 2>/dev/null && echo "OK" || echo "NAPAKA")
echo "$server: $status"
done
----
===== Nivo 3: CA povrnitev =====
**Sprožilec:** Težava s hibridnim CA certifikatom.
#!/bin/bash
# rollback-ca.sh - Preklop nazaj na klasični CA
echo "=== CA POVRNITEV ==="
echo "OPOZORILO: To preklopi podpisovalni CA za vse nove certifikate!"
read -p "Nadaljujem? (yes/no): " confirm
[ "$confirm" != "yes" ] && exit 1
# 1. Varnostna kopija 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 klasičnega 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. Generacija novega CRL s klasičnim CA
openssl ca -config /etc/pki/CA/openssl.cnf -gencrl -out /var/www/pki/crl.pem
# 4. Ponovni zagon OCSP odzivnika (če obstaja)
systemctl restart ocsp-responder
# 5. Dokumentacija
echo "$(date -Iseconds) CA-POVRNITEV: Preklop na klasični CA" >> /var/log/pki-rollback.log
echo "CA povrnitev končana."
echo "Novi certifikati bodo zdaj podpisani s klasičnim CA."
----
===== Nivo 4: Popolna povrnitev =====
**Sprožilec:** Katastrofalne težave s hibridnim PKI.
**POZOR:** To deaktivira celoten hibridni PKI in zahteva ponovno izdajo vseh hibridnih certifikatov!
#!/bin/bash
# rollback-complete.sh - Popolna povrnitev na klasični PKI
echo "========================================"
echo " POPOLNA PKI POVRNITEV"
echo "========================================"
echo ""
echo "OPOZORILO: To bo:"
echo " 1. Preklicalo vse hibridne certifikate"
echo " 2. Preklopilo vse strežnike na klasično"
echo " 3. Deaktiviralo hibridni CA"
echo ""
read -p "Vnesite 'ROLLBACK' za nadaljevanje: " 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 "Začetek: $(date -Iseconds)"
# 1. Identifikacija vseh hibridnih certifikatov
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. Ustvarjanje seznama strežnikov
echo "=== Faza 2: Mapiranje strežnikov ==="
# (Mapiranje strežnik → certifikat iz CMDB ali inventure)
# 3. Izdaja klasičnih certifikatov za vse
echo "=== Faza 3: Klasična ponovna izdaja ==="
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 "Ponovna izdaja: $subject"
# Tukaj: Izdaja klasičnega certifikata
done < /tmp/hybrid-certs.txt
# 4. Posodobitev strežnikov
echo "=== Faza 4: Namestitev ==="
# (Vzporedna namestitev klasičnih cert. na vse strežnike)
# 5. Preklic hibridnih certifikatov
echo "=== Faza 5: Preklic ==="
while read cert; do
openssl ca -config /etc/pki/hybrid/openssl.cnf -revoke "$cert" -crl_reason superseded
done < /tmp/hybrid-certs.txt
# 6. Končni CRL
openssl ca -config /etc/pki/hybrid/openssl.cnf -gencrl -out /var/www/pki/hybrid-final.crl
# 7. Hibridni CA brez povezave
echo "=== Faza 6: Deaktivacija hibridnega CA ==="
mv /etc/pki/hybrid /etc/pki/hybrid-DISABLED-$(date +%Y%m%d)
echo "=== POVRNITEV KONČANA ==="
echo "Konec: $(date -Iseconds)"
echo "Dnevnik: $LOG"
----
===== Postopek testiranja povrnitve =====
**Testirajte četrtletno:**
| Korak | Akcija | Pričakovan rezultat |
|-------|--------|---------------------|
| 1 | Testni strežnik s hibridnim cert. | Strežnik deluje |
| 2 | Izvedba rollback-single.sh | Strežnik ima klasični cert. |
| 3 | Test povezave | TLS deluje |
| 4 | Pregled dnevnika povrnitve | Vsi koraki dokumentirani |
| 5 | Obnovitev hibridnega cert. | Nazaj na hibridno |
# Skripta za test povrnitve
#!/bin/bash
TEST_SERVER="test-server.example.com"
echo "=== Test povrnitve $(date) ==="
# Shranjevanje trenutnega stanja
openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/before.txt
# Izvedba povrnitve
./rollback-single.sh "$TEST_SERVER" server-cert
# Preverjanje novega stanja
openssl s_client -connect "$TEST_SERVER:443" -brief 2>/dev/null > /tmp/after.txt
# Primerjava
echo "Pred:"
grep "Signature" /tmp/before.txt
echo "Po:"
grep "Signature" /tmp/after.txt
# Obnovitev
echo "Obnavljam hibridno..."
# ...
----
===== Dokumentacija =====
**Ob vsaki povrnitvi dokumentirajte:**
| Polje | Vsebina |
|-------|---------|
| Datum/čas | ISO 8601 |
| Razlog | Opis težave |
| Nivo | Single/Service/CA/Complete |
| Prizadeti strežniki | Seznam |
| Izvajalec | Ime |
| Trajanje | Minute |
| Preverjanje | OK/Težave |
----
===== Kontrolni seznam =====
| # | Kontrolna točka | |
|---|-----------------|---|
| 1 | Varnostna kopija klasičnega CA obstaja | |
| 2 | Skripte za povrnitev testirane | |
| 3 | Inventar strežnikov aktualen | |
| 4 | Varnostne kopije certifikatov obstajajo | |
| 5 | Komunikacijski načrt obstaja | |
| 6 | Zadnji test < 90 dni | |
----
===== Povezana dokumentacija =====
* [[.:classic-to-hybrid|Klasično → Hibridno]] – Migracija
* [[..:disaster-recovery:start|Obnova po katastrofi]] – Večji izpadi
* [[..:tagesgeschaeft:zertifikat-widerrufen|Preklic certifikata]] – Posamezni preklic
----
<< [[.:parallel-betrieb|← Vzporedna operacija]] | [[.:inventur|→ Inventura]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>rollback notfall disaster-recovery migration operator}}