~~NOTOC~~
====== Scenarij 4.1: Obnova certifikata (Renewal) ======
**Kategorija:** [[.:start|Upravljanje certifikatov]] \\
**Kompleksnost:** Srednja \\
**Predpogoji:** Obstoječi certifikat, isti ključ \\
**Ocenjeni čas:** 10-15 minut
----
===== Opis =====
Ta scenarij opisuje **obnovo iztekajočega certifikata** ob ohranitvi obstoječega para ključev. Obnova je smiselna, če ključ ni ogrožen in je moč ključa še zadostna.
**Obnova proti ponovni izdaji ključa:**
^ Vidik ^ Obnova ^ Ponovna izdaja ^
| Par ključev | Isti | Nov |
| CSR | Opcijsko nov | Obvezno nov |
| Subject | Lahko se prilagodi | Lahko se prilagodi |
| Razlog | Iztek | Ogroženost, nadgradnja |
----
===== Potek dela =====
flowchart LR
LOAD[Nalaganje starega certifikata] --> CHECK[Preverjanje izteka]
CHECK --> CSR[CSR z istim ključem]
CSR --> ISSUE[Nov certifikat]
ISSUE --> DEPLOY[Namestitev]
DEPLOY --> REVOKE[Preklic starega]
style ISSUE fill:#e8f5e9
----
===== Primer kode (C#) =====
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ;
using var ctx = PqCryptoContext.Initialize();
// Nalaganje obstoječega certifikata in ključa
var oldCert = ctx.LoadCertificate("server.crt.pem");
var existingKey = ctx.LoadPrivateKey("server.key.pem", "KeyPassword!");
// Nalaganje CA
var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem");
var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!");
// Preverjanje ali je obnova smiselna
var daysUntilExpiry = (oldCert.NotAfter - DateTime.UtcNow).Days;
if (daysUntilExpiry > 90)
{
Console.WriteLine($"Certifikat se velja {daysUntilExpiry} dni.");
}
// Ustvarjanje CSR z obstoječim ključem
var csr = ctx.CreateCertificateRequest(
existingKey,
oldCert.SubjectName, // Prevzem Subject
ctx.GetExtensions(oldCert) // Prevzem Extensions
);
// Izdaja novega certifikata
var newCert = ctx.IssueCertificate(
csr,
issuerCert: caCert,
issuerKey: caKey,
serialNumber: ctx.GenerateSerialNumber(), // Nova serijska!
validFrom: DateTime.UtcNow.AddDays(-1), // Prekrivanje
validDays: 365,
extensions: new ExtBuilder()
.BasicConstraints(ca: false, critical: true)
.KeyUsage(KeyUsageFlags.DigitalSignature | KeyUsageFlags.KeyEncipherment)
.ExtendedKeyUsage(ExtKeyUsage.ServerAuth)
.SubjectKeyIdentifier(existingKey.PublicKey) // Isti SKI!
.AuthorityKeyIdentifier(caCert)
.CrlDistributionPoint("http://crl.example.com/intermediate.crl")
.Build()
);
// Shranjevanje
newCert.ToPemFile("server-renewed.crt.pem");
Console.WriteLine("Certifikat obnovljen:");
Console.WriteLine($" Stara serijska: {oldCert.SerialNumber}");
Console.WriteLine($" Nova serijska: {newCert.SerialNumber}");
Console.WriteLine($" Nov datum izteka: {newCert.NotAfter:yyyy-MM-dd}");
----
===== Samodejno preverjanje obnove =====
// Preverjanje vseh certifikatov v shrambi
public IEnumerable GetExpiringCertificates(
X509Store store,
int warningDays = 30)
{
store.Open(OpenFlags.ReadOnly);
try
{
return store.Certificates
.Where(c => c.NotAfter <= DateTime.UtcNow.AddDays(warningDays))
.Where(c => c.NotAfter > DateTime.UtcNow) // Se ni potekel
.OrderBy(c => c.NotAfter)
.ToList();
}
finally
{
store.Close();
}
}
// Uporaba
using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine);
var expiring = GetExpiringCertificates(store, warningDays: 30);
foreach (var cert in expiring)
{
Console.WriteLine($"OPOZORILO: {cert.Subject} poteče {cert.NotAfter:d}");
}
----
===== Panožni cikli obnove =====
^ Panoga ^ Tipičen cikel ^ Predčasnost obnove ^ Posebnost ^
| **Standardni IT** | 1 leto | 30 dni | Priporočena avtomatizacija |
| **Energetika/SCADA** | 3-5 let | 90 dni | Upoštevati vzdrževalna okna |
| **Zdravstvo** | 1-2 leti | 60 dni | Zahtevana revizijska sled |
| **Avtomobilska** | 2-3 leta | 180 dni | Načrtovanje OTA posodobitev |
----
===== Najboljše prakse =====
**Priporočila za obnovo:**
* Načrtujte čas prekrivanja (stari certifikat še 1-7 dni veljaven po obnovi)
* Implementirajte samodejni nadzor
* Prekličite stari certifikat šele po uspešni namestitvi
* Subject Key Identifier ostane isti (olajša sledenje)
**Kdaj NE obnavljati:**
* Ključ morda ogrožen → [[.:rekey|Ponovna izdaja]]
* Potrebna nadgradnja algoritma (RSA → ML-DSA) → [[.:rekey|Ponovna izdaja]]
* Dolžina ključa premajhna → [[.:rekey|Ponovna izdaja]]
----
===== Povezani scenariji =====
^ Povezava ^ Scenarij ^ Opis ^
| **Alternativa** | [[.:rekey|4.2 Ponovna izdaja]] | Nov ključ |
| **Naslednji korak** | [[sl:int:pqcrypt:szenarien:widerruf:zertifikat_widerrufen|6.4 Preklic]] | Stari certifikat |
| **Povezano** | [[.:backup|4.4 Varnostna kopija]] | Varnostna kopija pred obnovo |
----
<< [[.:start|← Pregled upravljanja]] | [[sl:int:pqcrypt:szenarien:start|↑ Scenariji]] | [[.:rekey|4.2 Ponovna izdaja →]] >>
{{tag>szenario verwaltung renewal erneuerung zertifikat}}
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//