====== TrustStoreExtensions & PqTrustStore ====== Upravljanje prilagojenega Trust Store za PQ-kompatibilne PKI-infrastrukture. ---- ===== Pregled ===== ^ Razred ^ Opis ^ | ''PqTrustStore'' | Polnopravni Trust Store s PQ-podporo | | ''TrustStoreExtensions'' | Razširitvene metode za ''X509Certificate2Collection'' | | ''TrustEntry'' | Metapodatki za vnose Trust Store | | ''TrustType'' | Enum: TrustAnchor, IntermediateCA, itd. | ---- ===== Razred PqTrustStore ===== using WvdS.System.Security.Cryptography.X509Certificates; // Ustvarjanje Trust Store using var trustStore = new PqTrustStore(); // Dodajanje Root CA var rootCa = new X509Certificate2("root-ca.cer"); trustStore.AddTrustAnchor(rootCa, alias: "Korenski CA podjetja"); // Dodajanje Intermediate CA var intermediateCa = new X509Certificate2("intermediate-ca.cer"); trustStore.AddIntermediate(intermediateCa, alias: "Izdajateljski CA"); // Uporaba Trust Store Console.WriteLine($"Trust Store vsebuje {trustStore.Count} vnosov"); ---- ===== Integracija z X509Chain ===== **Validacija s prilagojenim Trust Store:** using System.Security.Cryptography.X509Certificates; using WvdS.System.Security.Cryptography; using WvdS.System.Security.Cryptography.X509Certificates; // Nalaganje Trust Store using var trustStore = PqTrustStore.LoadFromPem("company-trust-store.pem"); // Validacija certifikata var userCert = new X509Certificate2("user.cer"); using var chain = new X509Chain(); bool isValid = chain.Build(userCert, trustStore, CryptoMode.Hybrid); if (isValid) { Console.WriteLine("Certifikat je veljaven"); } else { foreach (var status in chain.ChainStatus) { Console.WriteLine($"Napaka: {status.StatusInformation}"); } } **Z X509Certificate2Collection:** // Enostavneje: neposredno s Collection var trustAnchors = TrustStoreExtensions.LoadFromPem("trust-anchors.pem"); using var chain = new X509Chain(); bool isValid = chain.Build(userCert, trustAnchors, CryptoMode.Hybrid); ---- ===== Uvoz/Izvoz Trust Store ===== **PEM-paket:** // Shranjevanje trustStore.SaveToPem("trust-store.pem"); // Nalaganje var loadedStore = PqTrustStore.LoadFromPem("trust-store.pem"); **PKCS#7 (DER):** // Shranjevanje kot PKCS#7 trustStore.SaveToPkcs7("trust-store.p7b"); // Nalaganje var loadedStore = PqTrustStore.LoadFromPkcs7("trust-store.p7b"); ---- ===== Uvoz sistemskega Store ===== // Polnjenje Trust Store s sistemskimi certifikati using var trustStore = new PqTrustStore(); // Uvoz Windows Root CA-jev trustStore.ImportFromSystemRootStore(); // Uvoz Windows Intermediate CA-jev trustStore.ImportFromSystemIntermediateStore(); // Izvoz kot PEM za air-gapped sisteme trustStore.SaveToPem("system-trust-store.pem"); ---- ===== Enum TrustType ===== ^ Vrednost ^ Opis ^ | ''TrustAnchor'' | Zaupni sidro (Root CA) | | ''IntermediateCA'' | Vmesna certifikacijska agencija | | ''CrossCertifiedCA'' | Navzkrižno certificiran CA | | ''EndEntity'' | Končna entiteta (ni CA) | ---- ===== Poizvedbe po Trust Store ===== // Samo Trust Anchors var roots = trustStore.TrustAnchors; // Samo Intermediate CA-ji var intermediates = trustStore.IntermediateCAs; // Iskanje po Subject var found = trustStore.FindBySubjectName("Podjetje"); // Iskanje po Thumbprint var entry = trustStore.FindByThumbprint("A1B2C3..."); // Preverjanje ali je vsebovano bool exists = trustStore.Contains(certificate); ---- ===== Poročilo o validaciji ===== using var chain = new X509Chain(); chain.Build(cert, trustStore, CryptoMode.Hybrid); // Ustvarjanje podrobnega poročila var report = chain.GetValidationReport(); Console.WriteLine($"Veljavno: {report.IsValid}"); Console.WriteLine($"Dolžina verige: {report.ChainLength}"); Console.WriteLine($"Popolnoma PQ-zaščiteno: {report.IsFullyPqProtected}"); // Posamezni elementi foreach (var element in report.Elements) { Console.WriteLine($" {element.Subject}"); Console.WriteLine($" Način: {element.CryptoMode}"); Console.WriteLine($" PQ-ključi: {element.HasPqKeys}"); } **Primer izhoda:** Chain Validation: VALID Chain Length: 3 Fully PQ Protected: True Elements: [0] CN=Uporabniški certifikat Mode: Hybrid, PQ Keys: True [1] CN=Izdajateljski CA Mode: Hybrid, PQ Keys: True [2] CN=Korenski CA Mode: Hybrid, PQ Keys: True ---- ===== Offline CRL-preverjanje ===== Za air-gapped sisteme s predhodno naloženimi CRL-ji: // Nalaganje CRL-jev var crls = new List { File.ReadAllBytes("root-ca.crl"), File.ReadAllBytes("issuing-ca.crl") }; using var chain = new X509Chain(); bool isValid = chain.BuildWithOfflineCrl( certificate, trustStore.ToCollection(), crls, CryptoMode.Hybrid); ---- ===== Razširitve Collection ===== // Filtriranje Collection var collection = new X509Certificate2Collection(); collection.Import("certificates.p7b"); // Samo CA-ji var cas = collection.FilterCertificateAuthorities(); // Samo Root CA-ji (samopodpisani) var roots = collection.FilterRootCertificates(); // Iskanje po Subject var found = collection.FindBySubjectName("Podjetje"); // Preverjanje PQ-statusa bool hasPq = collection.HasPqProtectedCertificates(); // Shranjevanje kot PEM collection.SaveToPem("output.pem"); ---- ===== Najboljše prakse ===== **Hierarhija Trust Store:** PqTrustStore ├── TrustAnchors (Root CA-ji) │ └── → chain.ChainPolicy.CustomTrustStore └── IntermediateCAs └── → chain.ChainPolicy.ExtraStore **Priporočila:** * **Načelo minimalnosti:** Vključite samo potrebne CA-je * **PQ-migracija:** Postopno dodajajte PQ-ključe k obstoječim CA-jem * **Varnostna kopija:** Redno varnostno kopirajte Trust Store * **Validacija:** Preverite nove CA-je pred vključitvijo ---- ===== Glej tudi ===== * [[.:x509chainextensions|X509ChainExtensions]] - Validacija verige * [[.:revocationextensions|RevocationExtensions]] - Preverjanje preklica * [[sl:int:pqcrypt:konzepte:pki|PKI-koncepti]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional// {{tag>truststore pki ca chain}}