Kategorija: Upravljanje certifikatima
Složenost: ⭐⭐⭐ (Srednja)
Preduvjeti: Postojeći certifikat, isti ključ
Procijenjeno vrijeme: 10-15 minuta
Ovaj scenarij opisuje obnovu certifikata koji istječe uz zadržavanje postojećeg para ključeva. Obnova ima smisla kada ključ nije kompromitiran i jačina ključa je još uvijek dostatna.
Obnova vs. Re-Key:
| Aspekt | Obnova | Re-Key |
|---|---|---|
| Par ključeva | Isti | Novi |
| CSR | Opcionalno novi | Obavezno novi |
| Subject | Može se prilagoditi | Može se prilagoditi |
| Razlog | Istek | Kompromitacija, nadogradnja |
using WvdS.Security.Cryptography.X509Certificates.Extensions.PQ; using var ctx = PqCryptoContext.Initialize(); // Učitavanje postojećeg certifikata i ključa var oldCert = ctx.LoadCertificate("server.crt.pem"); var existingKey = ctx.LoadPrivateKey("server.key.pem", "KeyPassword!"); // Učitavanje CA var caCert = ctx.LoadCertificate("intermediate-ca.crt.pem"); var caKey = ctx.LoadPrivateKey("intermediate-ca.key.pem", "CaPassword!"); // Provjera ima li smisla obnova var daysUntilExpiry = (oldCert.NotAfter - DateTime.UtcNow).Days; if (daysUntilExpiry > 90) { Console.WriteLine($"Certifikat još {daysUntilExpiry} dana valjan."); } // Kreiranje CSR-a s postojećim ključem var csr = ctx.CreateCertificateRequest( existingKey, oldCert.SubjectName, // Preuzimanje Subjecta ctx.GetExtensions(oldCert) // Preuzimanje ekstenzija ); // Izdavanje novog certifikata var newCert = ctx.IssueCertificate( csr, issuerCert: caCert, issuerKey: caKey, serialNumber: ctx.GenerateSerialNumber(), // Novi Serial! validFrom: DateTime.UtcNow.AddDays(-1), // Preklapanje 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() ); // Spremanje newCert.ToPemFile("server-renewed.crt.pem"); Console.WriteLine("Certifikat obnovljen:"); Console.WriteLine($" Stari Serial: {oldCert.SerialNumber}"); Console.WriteLine($" Novi Serial: {newCert.SerialNumber}"); Console.WriteLine($" Novi datum isteka: {newCert.NotAfter:yyyy-MM-dd}");
// Provjera svih certifikata u storeu 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) // Još nije istekao .OrderBy(c => c.NotAfter) .ToList(); } finally { store.Close(); } } // Korištenje using var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); var expiring = GetExpiringCertificates(store, warningDays: 30); foreach (var cert in expiring) { Console.WriteLine($"UPOZORENJE: {cert.Subject} istječe {cert.NotAfter:d}"); }
| Industrija | Tipični ciklus | Vrijeme unaprijed | Posebnost |
|---|---|---|---|
| Standardni IT | 1 godina | 30 dana | Preporučena automatizacija |
| Energetika/SCADA | 3-5 godina | 90 dana | Obratiti pažnju na prozore održavanja |
| Zdravstvo | 1-2 godine | 60 dana | Potreban audit trag |
| Automobilska | 2-3 godine | 180 dana | Planiranje OTA ažuriranja |
Preporuke za obnovu:
Kada NE obnavljati:
| Odnos | Scenarij | Opis |
|---|---|---|
| Alternativa | 4.2 Re-Key | Novi ključ |
| Sljedeći korak | 6.4 Opoziv | Stari certifikat |
| Povezano | 4.4 Sigurnosna kopija | Prije obnove osigurati |
« ← Pregled upravljanja | ↑ Scenariji | 4.2 Re-Key → »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional