====== Navodilo: Obnova certifikata ======
**Trajanje:** ~15 minut \\
**Vloga:** PKI operater \\
**Sprožilec:** Opozorilo o izteku (30/14/7 dni)
----
===== Potek dela =====
flowchart TD
A[Opozorilo o izteku] --> B{Ključ ogrožen?}
B -->|Da| C[→ Navodilo za preklic]
B -->|Ne| D{Isti par ključev?}
D -->|Da| E[Ponovna certifikacija]
D -->|Ne| F[Ponovna izdaja ključa]
E --> G[Nov certifikat]
F --> H[Nov CSR]
H --> G
G --> I[Arhivirati stari certifikat]
I --> J[Namestiti nov certifikat]
J --> K[Posodobiti nadzor]
style B fill:#ffebee
style G fill:#e8f5e9
style J fill:#e3f2fd
----
===== Korak 1: Identifikacija iztekajočih certifikatov =====
# Vsi certifikati z iztekom < 30 dni
find /etc/ssl/certs -name "*.pem" -exec sh -c '
enddate=$(openssl x509 -enddate -noout -in "$1" 2>/dev/null | cut -d= -f2)
if [ -n "$enddate" ]; then
expiry=$(date -d "$enddate" +%s 2>/dev/null)
now=$(date +%s)
days=$(( (expiry - now) / 86400 ))
if [ "$days" -lt 30 ]; then
echo "$1: $days dni"
fi
fi
' _ {} \;
# PowerShell: Iskanje iztekajocih certifikatov
Get-ChildItem Cert:\LocalMachine\My | Where-Object {
$_.NotAfter -lt (Get-Date).AddDays(30)
} | Select-Object Subject, NotAfter, Thumbprint
----
===== Korak 2: Izbira metode obnove =====
| Metoda | Kdaj uporabiti | Prednost |
|--------|----------------|----------|
| **Ponovna certifikacija** | Ključ varen, brez sprememb | Hitro, brez ponovne namestitve |
| **Ponovna izdaja ključa** | Nova dolžina ključa, sprememba politike | Povečana varnost |
| **Zamenjava** | Nov algoritem (→ PQ) | Pripravljenost na prihodnost |
----
===== Korak 3a: Ponovna certifikacija (isti par ključev) =====
# Generiranje CSR iz obstoječega certifikata + ključa
openssl x509 -x509toreq -in old_cert.pem -signkey private.key -out renew.csr
# Izdaja novega certifikata
openssl ca -config openssl.cnf \
-extensions server_cert \
-in renew.csr \
-out renewed_cert.pem \
-days 365 \
-notext
----
===== Korak 3b: Ponovna izdaja ključa (nov par ključev) =====
# Generiranje novega kljuca (EC P-384)
openssl ecparam -genkey -name secp384r1 -out new_private.key
# Nov CSR z istim Subject
openssl req -new -key new_private.key -out rekey.csr \
-subj "$(openssl x509 -in old_cert.pem -subject -noout | sed 's/subject=//')"
# Izdaja certifikata
openssl ca -config openssl.cnf \
-extensions server_cert \
-in rekey.csr \
-out rekeyed_cert.pem \
-days 365
----
===== Korak 3c: Zamenjava (nadgradnja na hibridno/PQ) =====
// Migracija na hibridni nacin
using var oldCert = new X509Certificate2("old_cert.pfx", "password");
// Nov par kljucev (ML-DSA-65 za hibridno)
using var mlDsa = MlDsaSigner.Create(MlDsaParameterSet.MlDsa65);
using var ecdsa = ECDsa.Create(ECCurve.NamedCurves.nistP384);
var request = new CertificateRequest(
oldCert.SubjectName,
ecdsa,
HashAlgorithmName.SHA384);
// Prevzem razsiritev
foreach (var ext in oldCert.Extensions)
request.CertificateExtensions.Add(ext);
// Ustvarjanje hibridnega certifikata
var newCert = request.CreateSelfSigned(
DateTimeOffset.UtcNow,
DateTimeOffset.UtcNow.AddDays(365),
CryptoMode.Hybrid);
----
===== Korak 4: Arhiviranje starega certifikata =====
# Arhiviranje z metapodatki
ARCHIVE_DIR="/var/archive/certs/$(date +%Y)"
mkdir -p "$ARCHIVE_DIR"
# Certifikat + metapodatki
cp old_cert.pem "$ARCHIVE_DIR/$(openssl x509 -serial -noout -in old_cert.pem | cut -d= -f2).pem"
# Dnevnik arhiva
echo "$(date -Iseconds) RENEWED $(openssl x509 -serial -noout -in old_cert.pem)" >> /var/log/cert-archive.log
----
===== Korak 5: Namestitev =====
| Sistem | Metoda namestitve | Potreben ponovni zagon |
|--------|-------------------|------------------------|
| Apache | ''cp cert.pem /etc/ssl/; systemctl reload apache2'' | Ne |
| Nginx | ''cp cert.pem /etc/nginx/ssl/; nginx -s reload'' | Ne |
| IIS | ''Import-PfxCertificate; netsh http update'' | Ne |
| Kubernetes | ''kubectl create secret tls'' | Ponovni zagon Pod |
# Ponoven zagon Apache/Nginx
systemctl reload apache2
# ali
nginx -s reload
# Test povezave
openssl s_client -connect server.example.com:443 -brief
----
===== Korak 6: Posodobitev nadzora =====
# Vnos novega prstnega odtisa v nadzor
NEW_FP=$(openssl x509 -fingerprint -sha256 -noout -in renewed_cert.pem | cut -d= -f2)
echo "Nov prstni odtis: $NEW_FP"
# Posodobitev Prometheus opozorila (ce temelji na prstnem odtisu)
# Datum izteka v nadzoru se mora samodejno posodobiti
----
===== Kontrolni seznam po obnovi =====
| # | Kontrolna točka | Ukaz | |
|---|-----------------|------|---|
| 1 | Nov certifikat aktiven | ''openssl s_client -connect host:443'' | |
| 2 | Veriga popolna | ''openssl verify -CAfile chain.pem cert.pem'' | |
| 3 | Stari certifikat arhiviran | ''ls /var/archive/certs/'' | |
| 4 | Zahtevek zaprt | Sistem zahtevkov | |
| 5 | Nadzor posodobljen | Pregled nadzorne plošče | |
----
===== Odpravljanje težav =====
| Težava | Vzrok | Rešitev |
|--------|-------|---------|
| ''certificate has expired'' | Pozabljen ponoven zagon | Ponovno zagnati storitev |
| ''certificate chain incomplete'' | Manjka vmesni | ''cat cert.pem intermediate.pem > fullchain.pem'' |
| ''hostname mismatch'' | SAN ni posodobljen | CSR s pravilnimi SANi |
| Odjemalec ne zaupa | CA ni v shrambi | Distribuirati CA certifikat |
----
===== Povezana navodila =====
* [[.:zertifikat-ausstellen|Izdaja certifikata]] – Novi certifikati
* [[.:zertifikat-widerrufen|Preklic certifikata]] – Ob ogroženosti
* [[..:automatisierung:scheduled-renewal|Samodejna obnova]] – Avtomatizacija
----
<< [[.:zertifikat-ausstellen|← Izdaja certifikata]] | [[.:zertifikat-widerrufen|→ Preklic certifikata]] >>
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>runbook zertifikat erneuern renewal operator}}