~~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//