====== 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 { 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 ===== * [[.:x509certificate2extensions|X509Certificate2Extensions]] * [[.:truststoreextensions|TrustStoreExtensions]] * [[.:revocationextensions|RevocationExtensions]] * [[de:int:pqcrypt:konzepte:start|Krypto-Modi erklärt]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//