====== 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}}