====== TrustStoreExtensions & PqTrustStore ======
Upravljanje prilagođenim Trust Store-om za PQ-kompatibilne PKI infrastrukture.
----
===== Pregled =====
^ Klasa ^ Opis ^
| ''PqTrustStore'' | Potpuni Trust Store s PQ podrškom |
| ''TrustStoreExtensions'' | Extension Methods za ''X509Certificate2Collection'' |
| ''TrustEntry'' | Metapodaci za unose u Trust Store |
| ''TrustType'' | Enum: TrustAnchor, IntermediateCA, itd. |
----
===== PqTrustStore Klasa =====
using WvdS.System.Security.Cryptography.X509Certificates;
// Stvaranje Trust Store-a
using var trustStore = new PqTrustStore();
// Dodavanje Root CA
var rootCa = new X509Certificate2("root-ca.cer");
trustStore.AddTrustAnchor(rootCa, alias: "Company Root CA");
// Dodavanje Intermediate CA
var intermediateCa = new X509Certificate2("intermediate-ca.cer");
trustStore.AddIntermediate(intermediateCa, alias: "Issuing CA");
// Korištenje Trust Store-a
Console.WriteLine($"Trust Store sadrži {trustStore.Count} unosa");
----
===== Integracija s X509Chain =====
**Validacija s prilagođenim Trust Store-om:**
using System.Security.Cryptography.X509Certificates;
using WvdS.System.Security.Cryptography;
using WvdS.System.Security.Cryptography.X509Certificates;
// Učitavanje Trust Store-a
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 valjan");
}
else
{
foreach (var status in chain.ChainStatus)
{
Console.WriteLine($"Greška: {status.StatusInformation}");
}
}
**S X509Certificate2Collection:**
// Jednostavnije: Izravno s kolekcijom
var trustAnchors = TrustStoreExtensions.LoadFromPem("trust-anchors.pem");
using var chain = new X509Chain();
bool isValid = chain.Build(userCert, trustAnchors, CryptoMode.Hybrid);
----
===== Trust Store Import/Export =====
**PEM Bundle:**
// Spremanje
trustStore.SaveToPem("trust-store.pem");
// Učitavanje
var loadedStore = PqTrustStore.LoadFromPem("trust-store.pem");
**PKCS#7 (DER):**
// Spremanje kao PKCS#7
trustStore.SaveToPkcs7("trust-store.p7b");
// Učitavanje
var loadedStore = PqTrustStore.LoadFromPkcs7("trust-store.p7b");
----
===== Import iz sistemskog Store-a =====
// Popunjavanje Trust Store-a sa sistemskim certifikatima
using var trustStore = new PqTrustStore();
// Import Windows Root CA-ova
trustStore.ImportFromSystemRootStore();
// Import Windows Intermediate CA-ova
trustStore.ImportFromSystemIntermediateStore();
// Export kao PEM za air-gapped sustave
trustStore.SaveToPem("system-trust-store.pem");
----
===== TrustType Enum =====
^ Vrijednost ^ Opis ^
| ''TrustAnchor'' | Sidro povjerenja (Root CA) |
| ''IntermediateCA'' | Posrednička certifikacijska agencija |
| ''CrossCertifiedCA'' | Unakrsno certificirana CA |
| ''EndEntity'' | Krajnji entitet (nije CA) |
----
===== Upiti u Trust Store =====
// Samo Trust Anchori
var roots = trustStore.TrustAnchors;
// Samo Intermediate CA-ovi
var intermediates = trustStore.IntermediateCAs;
// Pretraga po Subject-u
var found = trustStore.FindBySubjectName("Company");
// Pretraga po Thumbprint-u
var entry = trustStore.FindByThumbprint("A1B2C3...");
// Provjera postojanja
bool exists = trustStore.Contains(certificate);
----
===== Izvješće o validaciji =====
using var chain = new X509Chain();
chain.Build(cert, trustStore, CryptoMode.Hybrid);
// Stvaranje detaljnog izvješća
var report = chain.GetValidationReport();
Console.WriteLine($"Valjano: {report.IsValid}");
Console.WriteLine($"Duljina lanca: {report.ChainLength}");
Console.WriteLine($"Potpuno PQ-zaštićeno: {report.IsFullyPqProtected}");
// Pojedinačni elementi
foreach (var element in report.Elements)
{
Console.WriteLine($" {element.Subject}");
Console.WriteLine($" Način: {element.CryptoMode}");
Console.WriteLine($" PQ ključevi: {element.HasPqKeys}");
}
**Primjer izlaza:**
Chain Validation: VALID
Chain Length: 3
Fully PQ Protected: True
Elements:
[0] CN=User Certificate
Mode: Hybrid, PQ Keys: True
[1] CN=Issuing CA
Mode: Hybrid, PQ Keys: True
[2] CN=Root CA
Mode: Hybrid, PQ Keys: True
----
===== Offline CRL provjera =====
Za air-gapped sustave s prethodno učitanim CRL-ovima:
// Učitavanje CRL-ova
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);
----
===== Collection Extensions =====
// Filtriranje kolekcije
var collection = new X509Certificate2Collection();
collection.Import("certificates.p7b");
// Samo CA-ovi
var cas = collection.FilterCertificateAuthorities();
// Samo Root CA-ovi (samopotpisani)
var roots = collection.FilterRootCertificates();
// Pretraga po Subject-u
var found = collection.FindBySubjectName("Company");
// Provjera PQ statusa
bool hasPq = collection.HasPqProtectedCertificates();
// Spremanje kao PEM
collection.SaveToPem("output.pem");
----
===== Najbolje prakse =====
**Hijerarhija Trust Store-a:**
PqTrustStore
├── TrustAnchors (Root CA-ovi)
│ └── → chain.ChainPolicy.CustomTrustStore
└── IntermediateCAs
└── → chain.ChainPolicy.ExtraStore
**Preporuke:**
* **Načelo minimalnosti:** Uključiti samo potrebne CA-ove
* **PQ migracija:** Postupno dodavati PQ ključeve postojećim CA-ovima
* **Sigurnosna kopija:** Redovito izrađivati sigurnosne kopije Trust Store-a
* **Validacija:** Provjeriti nove CA-ove prije dodavanja
----
===== Vidi također =====
* [[.:x509chainextensions|X509ChainExtensions]] - Validacija lanca
* [[.:revocationextensions|RevocationExtensions]] - Provjera opoziva
* [[hr:int:pqcrypt:konzepte:pki|PKI koncepti]]
----
//Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//
{{tag>truststore pki ca chain}}