Inhaltsverzeichnis

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<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("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


Wolfgang van der Stille @ EMSR DATA d.o.o. - Post-Quantum Cryptography Professional