Kategorija: Upravljanje certifikatov
Kompleksnost: Srednja
Predpogoji: Obstoječi certifikat, isti ključ
Ocenjeni čas: 10-15 minut
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 |
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}");
// Preverjanje vseh certifikatov v shrambi public IEnumerable<X509Certificate2> 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}"); }
| 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 |
Priporočila za obnovo:
Kdaj NE obnavljati:
| Povezava | Scenarij | Opis |
|---|---|---|
| Alternativa | 4.2 Ponovna izdaja | Nov ključ |
| Naslednji korak | 6.4 Preklic | Stari certifikat |
| Povezano | 4.4 Varnostna kopija | Varnostna kopija pred obnovo |
« ← Pregled upravljanja | ↑ Scenariji | 4.2 Ponovna izdaja → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional