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
Zuletzt geändert: den 29.01.2026 um 15:12