private void VerificatoStatoCertificato(X509Certificate2 certificate)
{
// --- CONTROLLO SCADENZA in maniera Semplice ---
DateTime oggi = DateTime.Now;
if (oggi < certificate.NotBefore)
{
MessageBox.Show($"Il certificato non è ancora valido.\nInizio validità: {certificate.NotBefore}",
"Certificato Non Valido", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
if (oggi > certificate.NotAfter)
{
MessageBox.Show($"Il certificato è SCADUTO.\nData di scadenza: {certificate.NotAfter}",
"Certificato Scaduto", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
// --- CONTROLLO REVOCA E CATENA scenario Avanzato ---
using (X509Chain chain = new X509Chain())
{
// Configurazione della politica di validazione
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online; // Forza controllo revoca
online (CRL/OCSP)
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.ExcludeRoot; // Non controlla la revoca
della Root CA
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
// Build() esegue la verifica effettiva
bool isValidChain =
chain.Build(certificate);
if (isValidChain)
{
MessageBox.Show("Il certificato è VALIDO, non è scaduto e non risulta revocato.",
"Verifica Completata", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
// Se isValidChain è false, analizziamo i motivi
specifici (es. Revocazione)
string erroriTrovati =
"";
foreach (X509ChainStatus status in chain.ChainStatus)
{
// Filtriamo per trovare specificamente la revoca
if (status.Status
== X509ChainStatusFlags.Revoked)
{
erroriTrovati += " IL CERTIFICATO È STATO
REVOCATO!\n";
}
else
{
erroriTrovati += $" {status.Status}: {status.StatusInformation}\n";
}
}
MessageBox.Show($"Il certificato non è valido:\n\n{erroriTrovati}",
"Errore Validazione", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
}
private void BtnVerifica_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(TxtPercorsoFileP7mVerifica.Text.Trim()))
{
Utility.MessaggioInfo("Selezionare un file firmato
di tipo .p7m");
return;
}
X509Certificate2 certificate = new X509Certificate2(TxtPercorsoFileP7mVerifica.Text.Trim());
//Invoca la funzione
VerificatoStatoCertificato(certificate);
}

