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 <strežnik> <ime-certifikata>"
    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


« ← Vzporedna operacija | → Inventura »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional

Zuletzt geändert: dne 30.01.2026 ob 07:30