====== CA varnostna kopija/obnova ======
**Kritično:** CA ključi so najdragocenejše premoženje PKI! \\
**RTO:** 4 ure | **RPO:** 24 ur
Postopki za varnostno kopiranje in obnovitev CA ključev in certifikatov.
----
===== Komponente za varnostno kopiranje =====
| Komponenta | Kritičnost | Frekvenca kopiranja |
|------------|------------|---------------------|
| Root-CA zasebni ključ | **Kritično** | Enkratno + brez povezave |
| Intermediate zasebni ključi | **Visoka** | Po vsaki spremembi |
| CA certifikati | Srednja | Dnevno |
| CA baza podatkov (index.txt) | Srednja | Dnevno |
| Konfiguracija (openssl.cnf) | Nizka | Ob spremembi |
| CRL podpisovalni ključ | Visoka | S CA ključem |
----
===== Strategija varnostnega kopiranja =====
flowchart TB
subgraph LIVE["PRODUKCIJA"]
L1[CA strežnik]
L2[HSM]
end
subgraph BACKUP["VARNOSTNA KOPIJA"]
B1[Šifrirana varnostna kopija]
B2[HSM rezervna reža]
B3[Shamir deleži]
end
subgraph OFFLINE["BREZ POVEZAVE"]
O1[Sef]
O2[Skrbniki]
O3[Oddaljena lokacija]
end
L1 --> B1 --> O1
L2 --> B2 --> O3
L1 --> B3 --> O2
style L2 fill:#e8f5e9
style O1 fill:#e3f2fd
----
===== Postopek varnostnega kopiranja =====
==== Programski ključi (brez HSM) ====
#!/bin/bash
# ca-backup.sh - Ustvarjanje CA varnostne kopije
BACKUP_DIR="/backup/pki/$(date +%Y%m%d)"
ENCRYPTION_KEY="/etc/pki/backup-key.pem" # RSA javni ključ za šifriranje
mkdir -p "$BACKUP_DIR"
# 1. Zasebni ključi (šifrirano)
echo "Varnostno kopiram zasebne ključe..."
for key in /etc/pki/CA/*.key; do
keyname=$(basename "$key" .key)
# Šifriranje z AES-256
openssl enc -aes-256-cbc -salt -pbkdf2 \
-in "$key" \
-out "$BACKUP_DIR/${keyname}.key.enc" \
-pass file:/etc/pki/backup-passphrase.txt
# Ali z RSA javnim ključem (asimetrično)
openssl pkeyutl -encrypt \
-pubin -inkey "$ENCRYPTION_KEY" \
-in "$key" \
-out "$BACKUP_DIR/${keyname}.key.rsa-enc"
done
# 2. Certifikati
echo "Varnostno kopiram certifikate..."
cp /etc/pki/CA/*.pem "$BACKUP_DIR/"
# 3. CA baza podatkov
echo "Varnostno kopiram CA bazo podatkov..."
cp /etc/pki/CA/index.txt "$BACKUP_DIR/"
cp /etc/pki/CA/serial "$BACKUP_DIR/"
cp /etc/pki/CA/crlnumber "$BACKUP_DIR/"
# 4. Konfiguracija
cp /etc/pki/CA/openssl.cnf "$BACKUP_DIR/"
# 5. Izdani certifikati
tar czf "$BACKUP_DIR/issued-certs.tar.gz" /etc/pki/CA/newcerts/
# 6. Kontrolne vsote
cd "$BACKUP_DIR"
sha256sum * > SHA256SUMS
# 7. Celoten arhiv (opcijsko)
cd /backup/pki
tar czf "ca-backup-$(date +%Y%m%d).tar.gz" "$(date +%Y%m%d)/"
echo "Varnostno kopiranje končano: $BACKUP_DIR"
==== Ključi v HSM ====
#!/bin/bash
# hsm-backup.sh - HSM varnostna kopija ključev
# Luna HSM
/usr/safenet/lunaclient/bin/lunacm << EOF
partition backup
partition name = ca-partition
backup file = /backup/hsm/ca-partition-$(date +%Y%m%d).bak
EOF
# Thales HSM
nShield-cknfastrc backup --slotlist=0 --output=/backup/hsm/nshield-$(date +%Y%m%d).bak
# AWS CloudHSM
aws cloudhsmv2 create-cluster-backup --cluster-id
==== Shamirjeva delitev skrivnosti ====
#!/bin/bash
# shamir-split.sh - Razdelitev ključa med skrbnike
KEY_FILE="/etc/pki/CA/root-ca.key"
SHARES=5
THRESHOLD=3
# Z ssss-split (Shamirjeva shema deljenja skrivnosti)
cat "$KEY_FILE" | ssss-split -t $THRESHOLD -n $SHARES -w root-ca
# Rezultat: 5 datotek (root-ca-1 do root-ca-5)
# Za obnovitev so potrebne vsaj 3
# Razdelitev med skrbnike
echo "Razdelitev deležev med skrbnike:"
echo " Delež 1 → Skrbnik A"
echo " Delež 2 → Skrbnik B"
echo " Delež 3 → Skrbnik C"
echo " Delež 4 → Oddaljen sef"
echo " Delež 5 → HSM escrow"
----
===== Postopek obnovitve =====
==== Programski ključi ====
#!/bin/bash
# ca-restore.sh - Obnovitev CA iz varnostne kopije
BACKUP_FILE="$1"
RESTORE_DIR="/etc/pki/CA"
if [ -z "$BACKUP_FILE" ]; then
echo "Uporaba: $0 "
exit 1
fi
echo "=== OBNOVITEV CA ==="
echo "Varnostna kopija: $BACKUP_FILE"
read -p "Nadaljujem? (yes/no): " confirm
[ "$confirm" != "yes" ] && exit 1
# 1. Varnostno kopiranje trenutnega stanja
echo "Varnostno kopiram trenutno stanje..."
mv "$RESTORE_DIR" "${RESTORE_DIR}.pre-restore-$(date +%Y%m%d%H%M%S)"
# 2. Razpakiranje varnostne kopije
echo "Razpakiram varnostno kopijo..."
mkdir -p "$RESTORE_DIR"
tar xzf "$BACKUP_FILE" -C "$RESTORE_DIR" --strip-components=1
# 3. Dešifriranje zasebnih ključev
echo "Dešifriram zasebne ključe..."
for enc_key in "$RESTORE_DIR"/*.key.enc; do
keyname=$(basename "$enc_key" .key.enc)
openssl enc -aes-256-cbc -d -pbkdf2 \
-in "$enc_key" \
-out "$RESTORE_DIR/${keyname}.key" \
-pass file:/etc/pki/backup-passphrase.txt
rm "$enc_key"
done
# 4. Nastavitev dovoljenj
chmod 600 "$RESTORE_DIR"/*.key
chmod 644 "$RESTORE_DIR"/*.pem
chown -R root:root "$RESTORE_DIR"
# 5. Preverjanje
echo "Preverjam obnovitev..."
for key in "$RESTORE_DIR"/*.key; do
cert="${key%.key}.pem"
if [ -f "$cert" ]; then
key_mod=$(openssl rsa -in "$key" -noout -modulus 2>/dev/null | md5sum)
cert_mod=$(openssl x509 -in "$cert" -noout -modulus 2>/dev/null | md5sum)
if [ "$key_mod" = "$cert_mod" ]; then
echo "OK $(basename "$key"): Ključ/Cert ujemanje"
else
echo "NAPAKA $(basename "$key"): NEUJEMANJE!"
fi
fi
done
# 6. Zagon CA storitev
echo "Zaganjam CA storitve..."
systemctl start pki-ca
systemctl start ocsp-responder
echo "=== OBNOVITEV KONČANA ==="
==== Združevanje Shamir deležev ====
#!/bin/bash
# shamir-combine.sh - Obnovitev ključa iz deležev
echo "Obnovitev Shamir deležev"
echo "Potrebni so vsaj 3 od 5 deležev"
# Zbiranje deležev (od skrbnikov)
ssss-combine -t 3 > /tmp/restored-key.tmp << EOF
EOF
# Preverjanje
openssl rsa -in /tmp/restored-key.tmp -check -noout
if [ $? -eq 0 ]; then
echo "Ključ uspešno obnovljen"
mv /tmp/restored-key.tmp /etc/pki/CA/root-ca.key
chmod 600 /etc/pki/CA/root-ca.key
else
echo "NAPAKA: Ključ neveljaven!"
rm /tmp/restored-key.tmp
fi
----
===== Preverjanje varnostne kopije =====
#!/bin/bash
# verify-backup.sh - Preverjanje integritete varnostne kopije
BACKUP_DIR="$1"
echo "=== Preverjanje varnostne kopije ==="
# Preverjanje kontrolnih vsot
cd "$BACKUP_DIR"
sha256sum -c SHA256SUMS
if [ $? -ne 0 ]; then
echo "NAPAKA: Neujemanje kontrolne vsote!"
exit 1
fi
# Preverjanje parov ključ/certifikat
for enc_key in *.key.enc; do
keyname=$(basename "$enc_key" .key.enc)
cert="${keyname}.pem"
if [ ! -f "$cert" ]; then
echo "OPOZORILO: Ni certifikata za $keyname"
continue
fi
# Dešifriranje in preverjanje (začasno)
openssl enc -aes-256-cbc -d -pbkdf2 \
-in "$enc_key" \
-out /tmp/verify.key \
-pass file:/etc/pki/backup-passphrase.txt
key_mod=$(openssl rsa -in /tmp/verify.key -noout -modulus 2>/dev/null | md5sum)
cert_mod=$(openssl x509 -in "$cert" -noout -modulus 2>/dev/null | md5sum)
if [ "$key_mod" = "$cert_mod" ]; then
echo "OK $keyname: V redu"
else
echo "NAPAKA $keyname: NEUJEMANJE!"
fi
rm /tmp/verify.key
done
echo "=== Preverjanje končano ==="
----
===== Urnik varnostnega kopiranja =====
| Komponenta | Frekvenca | Hramba | Medij |
|------------|-----------|--------|-------|
| CA baza podatkov | Dnevno | 30 dni | Disk → Trak |
| Intermediate ključi | Tedensko | 1 leto | Šifriran disk |
| Root-CA ključ | Enkratno | Trajno | Brez povezave sef |
| Konfiguracija | Ob spremembi | 5 verzij | Git |
----
===== Kontrolni seznam =====
| # | Kontrolna točka | |
|---|-----------------|---|
| 1 | Skripta za varnostno kopiranje konfigurirana | |
| 2 | Šifrirni ključ varno shranjen | |
| 3 | Shamir deleži razdeljeni | |
| 4 | Cron za varnostno kopiranje aktiven | |
| 5 | Oddaljena varnostna kopija obstaja | |
| 6 | Test obnovitve uspešen | |
| 7 | Zadnje preverjanje < 30 dni | |
----
===== Povezana dokumentacija =====
* [[.:key-ceremony|Ceremonija ključev]] – Varna generacija ključev
* [[.:notfall-revocation|Preklic v sili]] – Ob kompromitaciji
* [[sl:int:pqcrypt:administrator:betrieb|Obratovanje]] – Vsakodnevno vzdrževanje
----
<< [[.:start|← Obnova po katastrofi]] | [[.:key-ceremony|→ Ceremonija ključev]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>backup restore disaster-recovery ca operator}}