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.
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/ |
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"
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
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."
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"
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..." # ...
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 |
| # | 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 |
« ← Vzporedna operacija | → Inventura »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional