====== CA Backup/Restore ======
**Kritično:** CA ključevi su najvrijedniji asset PKI-a! \\
**RTO:** 4 sata | **RPO:** 24 sata
Postupak za sigurnosno kopiranje i vraćanje CA ključeva i certifikata.
----
===== Komponente sigurnosne kopije =====
| Komponenta | Kritičnost | Učestalost kopiranja |
|------------|------------|----------------------|
| Root-CA privatni ključ | **Kritično** | Jednokratno + Offline |
| Intermediate privatni ključevi | **Visoko** | Nakon svake promjene |
| CA certifikati | Srednje | Dnevno |
| CA baza podataka (index.txt) | Srednje | Dnevno |
| Konfiguracija (openssl.cnf) | Nisko | Pri promjeni |
| CRL-Signing ključ | Visoko | S CA ključem |
----
===== Strategija sigurnosnog kopiranja =====
flowchart TB
subgraph LIVE["PRODUKCIJA"]
L1[CA Server]
L2[HSM]
end
subgraph BACKUP["SIGURNOSNA KOPIJA"]
B1[Šifrirani backup]
B2[HSM Backup Slot]
B3[Shamir Shares]
end
subgraph OFFLINE["OFFLINE"]
O1[Sef]
O2[Povjerenici]
O3[Off-Site]
end
L1 --> B1 --> O1
L2 --> B2 --> O3
L1 --> B3 --> O2
style L2 fill:#e8f5e9
style O1 fill:#e3f2fd
----
===== Postupak sigurnosnog kopiranja =====
==== Softverski ključevi (bez HSM) ====
#!/bin/bash
# ca-backup.sh - Stvaranje CA sigurnosne 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. Privatni ključevi (šifrirano)
echo "Spremam privatne ključeve..."
for key in /etc/pki/CA/*.key; do
keyname=$(basename "$key" .key)
# Šifriranje s AES-256
openssl enc -aes-256-cbc -salt -pbkdf2 \
-in "$key" \
-out "$BACKUP_DIR/${keyname}.key.enc" \
-pass file:/etc/pki/backup-passphrase.txt
done
# 2. Certifikati
echo "Spremam certifikate..."
cp /etc/pki/CA/*.pem "$BACKUP_DIR/"
# 3. CA baza podataka
echo "Spremam CA bazu podataka..."
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 sume
cd "$BACKUP_DIR"
sha256sum * > SHA256SUMS
echo "Sigurnosna kopija završena: $BACKUP_DIR"
==== HSM-bazirani ključevi ====
#!/bin/bash
# hsm-backup.sh - HSM backup ključeva
# 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
# AWS CloudHSM
aws cloudhsmv2 create-cluster-backup --cluster-id
==== Shamir Secret Sharing ====
#!/bin/bash
# shamir-split.sh - Distribucija ključa na povjerenike
KEY_FILE="/etc/pki/CA/root-ca.key"
SHARES=5
THRESHOLD=3
# S ssss-split (Shamir's Secret Sharing Scheme)
cat "$KEY_FILE" | ssss-split -t $THRESHOLD -n $SHARES -w root-ca
# Rezultat: 5 datoteka (root-ca-1 do root-ca-5)
# Minimalno 3 potrebne za vraćanje
echo "Distribucija Shares na povjerenike:"
echo " Share 1 -> Povjerenik A"
echo " Share 2 -> Povjerenik B"
echo " Share 3 -> Povjerenik C"
echo " Share 4 -> Off-Site sef"
echo " Share 5 -> HSM Escrow"
----
===== Postupak vraćanja =====
==== Softverski ključevi ====
#!/bin/bash
# ca-restore.sh - Vraćanje CA iz sigurnosne kopije
BACKUP_FILE="$1"
RESTORE_DIR="/etc/pki/CA"
if [ -z "$BACKUP_FILE" ]; then
echo "Uporaba: $0 "
exit 1
fi
echo "=== CA RESTORE ==="
echo "Sigurnosna kopija: $BACKUP_FILE"
read -p "Nastaviti? (da/ne): " confirm
[ "$confirm" != "da" ] && exit 1
# 1. Spremanje trenutnog stanja
echo "Spremam trenutno stanje..."
mv "$RESTORE_DIR" "${RESTORE_DIR}.pre-restore-$(date +%Y%m%d%H%M%S)"
# 2. Raspakiranje sigurnosne kopije
echo "Raspakiravam sigurnosnu kopiju..."
mkdir -p "$RESTORE_DIR"
tar xzf "$BACKUP_FILE" -C "$RESTORE_DIR" --strip-components=1
# 3. Dešifriranje privatnih ključeva
echo "Dešifriram privatne ključeve..."
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. Postavljanje dozvola
chmod 600 "$RESTORE_DIR"/*.key
chmod 644 "$RESTORE_DIR"/*.pem
chown -R root:root "$RESTORE_DIR"
# 5. Verifikacija
echo "Verificiram vraćanje..."
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"): Key/Cert podudaranje"
else
echo "GRESKA $(basename "$key"): NEPODUDARANJE!"
fi
fi
done
# 6. Pokretanje CA servisa
echo "Pokrećem CA servise..."
systemctl start pki-ca
systemctl start ocsp-responder
echo "=== RESTORE ZAVRŠEN ==="
----
===== Raspored sigurnosnog kopiranja =====
| Komponenta | Učestalost | Čuvanje | Medij |
|------------|------------|---------|-------|
| CA baza podataka | Dnevno | 30 dana | Disk -> Traka |
| Intermediate ključevi | Tjedno | 1 godina | Šifrirani disk |
| Root-CA ključ | Jednokratno | Trajno | Offline sef |
| Konfiguracija | Pri promjeni | 5 verzija | Git |
----
===== Kontrolna lista =====
| # | Točka provjere | Gotovo |
|---|----------------|--------|
| 1 | Skripta za sigurnosno kopiranje konfigurirana | ☐ |
| 2 | Ključ za šifriranje sigurno pohranjen | ☐ |
| 3 | Shamir Shares distribuirani | ☐ |
| 4 | Backup-Cron aktivan | ☐ |
| 5 | Off-Site sigurnosna kopija postoji | ☐ |
| 6 | Test vraćanja uspješan | ☐ |
| 7 | Posljednja verifikacija < 30 dana | ☐ |
----
===== Povezana dokumentacija =====
* [[.:key-ceremony|Key Ceremony]] - Sigurno generiranje ključeva
* [[.:notfall-revocation|Hitni opoziv]] - Pri kompromitaciji
* [[hr:int:pqcrypt:administrator:betrieb|Rad]] - Svakodnevno održavanje
----
<< [[.:start|<- Disaster Recovery]] | [[.:key-ceremony|-> Key Ceremony]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>backup restore disaster-recovery ca operator}}