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