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