Inhaltsverzeichnis

TrustStoreExtensions & PqTrustStore

Custom Trust Store Management für PQ-kompatible PKI-Infrastrukturen.


Übersicht

Klasse Beschreibung
PqTrustStore Vollwertiger Trust Store mit PQ-Unterstützung
TrustStoreExtensions Extension Methods für X509Certificate2Collection
TrustEntry Metadaten für Trust Store Einträge
TrustType Enum: TrustAnchor, IntermediateCA, etc.

PqTrustStore Klasse

using WvdS.System.Security.Cryptography.X509Certificates;
 
// Trust Store erstellen
using var trustStore = new PqTrustStore();
 
// Root CA hinzufügen
var rootCa = new X509Certificate2("root-ca.cer");
trustStore.AddTrustAnchor(rootCa, alias: "Company Root CA");
 
// Intermediate CA hinzufügen
var intermediateCa = new X509Certificate2("intermediate-ca.cer");
trustStore.AddIntermediate(intermediateCa, alias: "Issuing CA");
 
// Trust Store verwenden
Console.WriteLine($"Trust Store enthält {trustStore.Count} Einträge");

Integration mit X509Chain

Mit Custom Trust Store validieren:

using System.Security.Cryptography.X509Certificates;
using WvdS.System.Security.Cryptography;
using WvdS.System.Security.Cryptography.X509Certificates;
 
// Trust Store laden
using var trustStore = PqTrustStore.LoadFromPem("company-trust-store.pem");
 
// Zertifikat validieren
var userCert = new X509Certificate2("user.cer");
 
using var chain = new X509Chain();
bool isValid = chain.Build(userCert, trustStore, CryptoMode.Hybrid);
 
if (isValid)
{
    Console.WriteLine("Zertifikat ist gültig");
}
else
{
    foreach (var status in chain.ChainStatus)
    {
        Console.WriteLine($"Fehler: {status.StatusInformation}");
    }
}

Mit X509Certificate2Collection:

// Einfacher: Direkt mit Collection
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:

// Speichern
trustStore.SaveToPem("trust-store.pem");
 
// Laden
var loadedStore = PqTrustStore.LoadFromPem("trust-store.pem");

PKCS#7 (DER):

// Speichern als PKCS#7
trustStore.SaveToPkcs7("trust-store.p7b");
 
// Laden
var loadedStore = PqTrustStore.LoadFromPkcs7("trust-store.p7b");

System Store Import

// Trust Store mit System-Zertifikaten befüllen
using var trustStore = new PqTrustStore();
 
// Windows Root CAs importieren
trustStore.ImportFromSystemRootStore();
 
// Windows Intermediate CAs importieren
trustStore.ImportFromSystemIntermediateStore();
 
// Als PEM exportieren für Air-Gapped Systeme
trustStore.SaveToPem("system-trust-store.pem");

TrustType Enum

Wert Beschreibung
TrustAnchor Vertrauensanker (Root CA)
IntermediateCA Zwischenzertifizierungsstelle
CrossCertifiedCA Cross-zertifizierte CA
EndEntity End-Entity (kein CA)

Trust Store Abfragen

// Nur Trust Anchors
var roots = trustStore.TrustAnchors;
 
// Nur Intermediate CAs
var intermediates = trustStore.IntermediateCAs;
 
// Suche nach Subject
var found = trustStore.FindBySubjectName("Company");
 
// Suche nach Thumbprint
var entry = trustStore.FindByThumbprint("A1B2C3...");
 
// Prüfen ob enthalten
bool exists = trustStore.Contains(certificate);

Validierungsbericht

using var chain = new X509Chain();
chain.Build(cert, trustStore, CryptoMode.Hybrid);
 
// Detaillierten Bericht erstellen
var report = chain.GetValidationReport();
 
Console.WriteLine($"Gültig: {report.IsValid}");
Console.WriteLine($"Kettenlänge: {report.ChainLength}");
Console.WriteLine($"Vollständig PQ-geschützt: {report.IsFullyPqProtected}");
 
// Einzelne Elemente
foreach (var element in report.Elements)
{
    Console.WriteLine($"  {element.Subject}");
    Console.WriteLine($"    Mode: {element.CryptoMode}");
    Console.WriteLine($"    PQ-Keys: {element.HasPqKeys}");
}

Beispiel-Ausgabe:

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-Prüfung

Für Air-Gapped Systeme mit vorgeladenen CRLs:

// CRLs laden
var crls = new List<byte[]>
{
    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

// Collection filtern
var collection = new X509Certificate2Collection();
collection.Import("certificates.p7b");
 
// Nur CAs
var cas = collection.FilterCertificateAuthorities();
 
// Nur Root CAs (self-signed)
var roots = collection.FilterRootCertificates();
 
// Nach Subject suchen
var found = collection.FindBySubjectName("Company");
 
// PQ-Status prüfen
bool hasPq = collection.HasPqProtectedCertificates();
 
// Als PEM speichern
collection.SaveToPem("output.pem");

Best Practices

Trust Store Hierarchie:

PqTrustStore
├── TrustAnchors (Root CAs)
│   └── → chain.ChainPolicy.CustomTrustStore
└── IntermediateCAs
    └── → chain.ChainPolicy.ExtraStore

Empfehlungen:


Siehe auch


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional