====== X509ChainExtensions ====== **Namespace:** ''WvdS.System.Security.Cryptography.X509Certificates'' Estensioni Drop-In Replacement per ''X509Chain'' con validazione delle firme Post-Quantum. Estende la validazione standard della catena con la verifica delle firme PQ in tutte e tre le modalità crittografiche. ===== Metodi ===== ^ Metodo ^ Descrizione ^ | ''Build(certificate, mode)'' | Costruisce e valida la catena dei certificati con CryptoMode | | ''Build(certificate, customTrustStore, mode)'' | Validazione della catena con Trust Store personalizzato | | ''Build(certificate, trustStore, mode)'' | Validazione della catena con PqTrustStore | | ''BuildWithRevocationCheck(...)'' | Build della catena con verifica CRL/OCSP | | ''BuildWithOfflineCrl(...)'' | Build della catena con dati CRL offline | | ''IsFullyPqProtected()'' | Verifica se l'intera catena è protetta PQ | | ''GetChainCryptoModes()'' | Restituisce i CryptoModes di tutti gli elementi della catena | | ''GetValidationReport()'' | Crea un report di validazione dettagliato | ===== Build con CryptoMode ===== using var chain = new X509Chain(); var cert = new X509Certificate2("certificate.pfx"); // Con CryptoMode esplicito bool isValid = chain.Build(cert, CryptoMode.Hybrid); // Con modalità predefinita da CryptoConfig bool isValid2 = chain.Build(cert, null); ==== Comportamento di validazione per modalità ==== ^ Modalità ^ Firma classica ^ Firma PQ ^ | Classic | Verificata | Ignorata | | Hybrid | Verificata | Verificata (se presente) | | PostQuantum | Verificata (struttura) | **Richiesta** | ===== Build con Trust Store personalizzato ===== // Con X509Certificate2Collection var trustAnchors = new X509Certificate2Collection(); trustAnchors.Add(rootCa); using var chain = new X509Chain(); bool isValid = chain.Build(cert, trustAnchors, CryptoMode.Hybrid); // Con 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, // oppure Offline CryptoMode.Hybrid); ===== BuildWithOfflineCrl ===== Per ambienti air-gapped o quando il download CRL non è possibile: // Caricare le CRL 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("L'intera catena è protetta PQ"); } else { // Quali certificati non sono protetti PQ? var modes = chain.GetChainCryptoModes(); for (int i = 0; i < modes.Length; i++) { if (modes[i] == CryptoMode.Classic) { Console.WriteLine($"L'elemento {i} non ha protezione PQ"); } } } ===== GetValidationReport ===== Crea un report dettagliato sulla validazione della catena: using var chain = new X509Chain(); chain.Build(cert, CryptoMode.Hybrid); var report = chain.GetValidationReport(); Console.WriteLine(report.ToString()); // Proprietà singole: Console.WriteLine($"Valido: {report.IsValid}"); Console.WriteLine($"Lunghezza catena: {report.ChainLength}"); Console.WriteLine($"Completamente protetto PQ: {report.IsFullyPqProtected}"); // Dettagli per elemento: foreach (var element in report.Elements) { Console.WriteLine($" {element.Subject}"); Console.WriteLine($" Modalità: {element.CryptoMode}"); Console.WriteLine($" Ha chiavi PQ: {element.HasPqKeys}"); } ===== ChainValidationReport ===== ^ Proprietà ^ Tipo ^ Descrizione ^ | ''IsValid'' | bool | La catena è valida | | ''ChainLength'' | int | Numero di elementi nella catena | | ''IsFullyPqProtected'' | bool | Tutti i certificati sono protetti PQ | | ''OverallStatus'' | X509ChainStatusFlags[] | Stato complessivo | | ''Elements'' | ChainElementInfo[] | Dettagli per elemento | ===== ChainElementInfo ===== ^ Proprietà ^ Tipo ^ Descrizione ^ | ''Subject'' | string | Subject del certificato | | ''Issuer'' | string | Emittente | | ''Thumbprint'' | string | Fingerprint SHA-1 | | ''NotBefore'' | DateTime | Valido da | | ''NotAfter'' | DateTime | Valido fino a | | ''CryptoMode'' | CryptoMode | Modalità rilevata | | ''HasPqKeys'' | bool | Chiavi PQ nello store | | ''StatusFlags'' | X509ChainStatusFlags[] | Flag di stato | | ''StatusMessages'' | string[] | Messaggi di stato | ===== Vedere anche ===== * [[.:x509certificate2extensions|X509Certificate2Extensions]] * [[.:truststoreextensions|TrustStoreExtensions]] * [[.:revocationextensions|RevocationExtensions]] * [[it:int:pqcrypt:konzepte:start|Modalità crittografiche spiegate]] ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional//