Inhaltsverzeichnis

X509ChainExtensions

Namespace: WvdS.System.Security.Cryptography.X509Certificates

Drop-In Replacement Extensions für X509Chain mit Post-Quantum Signatur-Validierung. Erweitert die Standard-Chain-Validierung um PQ-Signaturprüfung in allen drei Crypto-Modi.

Methoden

Methode Beschreibung
Build(certificate, mode) Baut und validiert die Zertifikatskette mit CryptoMode
Build(certificate, customTrustStore, mode) Chain-Validierung mit Custom Trust Store
Build(certificate, trustStore, mode) Chain-Validierung mit PqTrustStore
BuildWithRevocationCheck(…) Chain-Build mit CRL/OCSP Prüfung
BuildWithOfflineCrl(…) Chain-Build mit offline CRL-Daten
IsFullyPqProtected() Prüft ob gesamte Kette PQ-geschützt ist
GetChainCryptoModes() Gibt CryptoModes aller Kettenglieder zurück
GetValidationReport() Erstellt detaillierten Validierungsbericht

Build mit CryptoMode

using var chain = new X509Chain();
var cert = new X509Certificate2("certificate.pfx");
 
// Mit explizitem CryptoMode
bool isValid = chain.Build(cert, CryptoMode.Hybrid);
 
// Mit Default-Mode aus CryptoConfig
bool isValid2 = chain.Build(cert, null);

Validierungsverhalten nach Modus

Modus Klassische Signatur PQ-Signatur
Classic Geprüft Ignoriert
Hybrid Geprüft Geprüft (falls vorhanden)
PostQuantum Geprüft (Struktur) Erforderlich

Build mit Custom Trust Store

// Mit X509Certificate2Collection
var trustAnchors = new X509Certificate2Collection();
trustAnchors.Add(rootCa);
 
using var chain = new X509Chain();
bool isValid = chain.Build(cert, trustAnchors, CryptoMode.Hybrid);
 
// Mit PqTrustStore
var trustStore = PqTrustStore.LoadFromPem("truststore.pem");
bool isValid2 = chain.Build(cert, trustStore, CryptoMode.Hybrid);

BuildWithRevocationCheck

using var chain = new X509Chain();
bool isValid = chain.BuildWithRevocationCheck(
    certificate,
    customTrustStore,
    X509RevocationMode.Online,  // oder Offline
    CryptoMode.Hybrid);

BuildWithOfflineCrl

Für Air-Gapped Umgebungen oder wenn CRL-Download nicht möglich ist:

// CRLs laden
var crlData = new List<byte[]>
{
    File.ReadAllBytes("root-ca.crl"),
    File.ReadAllBytes("intermediate-ca.crl")
};
 
using var chain = new X509Chain();
bool isValid = chain.BuildWithOfflineCrl(
    certificate,
    customTrustStore,
    crlData,
    CryptoMode.Hybrid);

IsFullyPqProtected

using var chain = new X509Chain();
chain.Build(cert, CryptoMode.Hybrid);
 
if (chain.IsFullyPqProtected())
{
    Console.WriteLine("Gesamte Kette ist PQ-geschützt");
}
else
{
    // Welche Zertifikate sind nicht PQ-geschützt?
    var modes = chain.GetChainCryptoModes();
    for (int i = 0; i < modes.Length; i++)
    {
        if (modes[i] == CryptoMode.Classic)
        {
            Console.WriteLine($"Element {i} hat keinen PQ-Schutz");
        }
    }
}

GetValidationReport

Erstellt einen detaillierten Bericht über die Chain-Validierung:

using var chain = new X509Chain();
chain.Build(cert, CryptoMode.Hybrid);
 
var report = chain.GetValidationReport();
Console.WriteLine(report.ToString());
 
// Einzelne Properties:
Console.WriteLine($"Gültig: {report.IsValid}");
Console.WriteLine($"Kettenlänge: {report.ChainLength}");
Console.WriteLine($"Vollständig PQ-geschützt: {report.IsFullyPqProtected}");
 
// Details pro Element:
foreach (var element in report.Elements)
{
    Console.WriteLine($"  {element.Subject}");
    Console.WriteLine($"    Modus: {element.CryptoMode}");
    Console.WriteLine($"    Hat PQ-Keys: {element.HasPqKeys}");
}

ChainValidationReport

Property Typ Beschreibung
IsValid bool Kette ist gültig
ChainLength int Anzahl Kettenglieder
IsFullyPqProtected bool Alle Zertifikate PQ-geschützt
OverallStatus X509ChainStatusFlags[] Gesamt-Status
Elements ChainElementInfo[] Details pro Glied

ChainElementInfo

Property Typ Beschreibung
Subject string Zertifikat-Subject
Issuer string Aussteller
Thumbprint string SHA-1 Fingerprint
NotBefore DateTime Gültig ab
NotAfter DateTime Gültig bis
CryptoMode CryptoMode Erkannter Modus
HasPqKeys bool PQ-Keys im Store
StatusFlags X509ChainStatusFlags[] Status-Flags
StatusMessages string[] Status-Meldungen

Siehe auch


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