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