lunedì 6 dicembre 2021

C# Firma digitale informazioni del certificato in .Net 5

Si riporta un articolo scritto per il sito https://www.iprogrammatori.it/articoli/microsoft-net-framework/art_c-firma-digitale-informazioni-del-certi_1758.aspx 




In questo articolo vedremo come rilevare le informazioni del certificato in un file di tipo p7m, che sono i file firmati digitalmente.
La firma digitale è un ambito molto usato, soprattutto ai fini di attestare la legalità di un documento, come può essere un contratto di compravendita, bando e rilasci di permessi.
Sempre più utilizzata soprattutto negli ultimi anni la firma digitale, che rendere il file valido.
L’articolo fornirà al lettore le informazioni su come rilevare le informazioni, come la data, lo stato, l’ente e tante altre informazioni utili.
Utilizzeremo l’ultima versione del Framework, che al momento in cui scriviamo è la versione 5, con l’ambiente di sviluppo Visual Studio 2019, ed il  linguaggio di programmazione C#.

Creazione del progetto

Si crea un nuovo progetto di tipo “App Windows Forms” selezionando come versione del Framework la versione 5.
Inseriamo nella form che viene visualizzata a video, 6 label, che saranno utilizzate per visualizzare le informazioni relative al certificato, una casella di testo, due pulsante, di cui uno per rilevare le informazioni del certificato ed un altro per selezionare il file firmato, il tutto sarà come mostrato in figura 1.


Figura 1 – la finestra con i vari controlli.

Stesura del codice

Dopo aver impostato la form con i vari controlli, scriviamo il codice per rilevare le informazioni relative al file firmato.
Nel pulsante dei tre puntini, che avrà la proprietà “btnSelezionaFile”, facciamo doppio click in modo che passiamo in visualizzazione codice nell’evento click del pulsante.
Scriviamo il codice per visualizzare una finestra per selezionare i file firmati digitali.
Qui di seguito il frammento di codice per la selezione del file ed impostare la casella di testo, con il percorso e nome del file.

C#

private void btnSelezionaFile_Click(object sender, EventArgs e)

        {

            OpenFileDialog fileDialog = new OpenFileDialog();

            if (fileDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)

            {

                TxtPercorsoFile.Text = fileDialog.FileName;

            }

        }



Ora torniamo in modalità grafica, e facciamo doppio click sul pulsante con il testo “Rileva”, in questo modo passiamo in visualizzazione codice nell’evento click del pulsante.
Prima di scrivere il codice per il rilevamento delle informazioni del certificato, occorre aggiungere lo spazio dei nomi per la gestione dei certificati.
In alto sopra ad ogni dichiarazione, scriviamo lo spazio dei nomi per la gestione dei certificati, qui il frammento di codice.



C#

using System.Security.Cryptography.X509Certificates;


Ritorniamo all’evento click del pulsante per il rilevamento dei dati del certificato, tramite la classe “X509Certificate” passiamo nel costruttore il percorso e nome del file firmato, che abbiamo nella casella di testo. In questo modo si crea un oggetto con le proprietà e metodi che forniscono le informazioni al quale siamo interessati.
Una volta creato l’oggetto di tipo “X509Certificate” impostiamo le varie label con le informazioni da noi richieste, come l’ente, la data di validità, ed altro ancora.
Qui di seguito il frammento di codice delle suddette operazioni.

C#

private void BtnRileva_Click(object sender, EventArgs e)

        {

            try

            {

                X509Certificate CertificatoRilevato = new X509Certificate(TxtPercorsoFile.Text);

                label1.Text = "Ente Certificato: " +  CertificatoRilevato.Issuer;

                label2.Text = "Valido dal: " + CertificatoRilevato.GetEffectiveDateString();

                label3.Text = "Valido fino al: " + CertificatoRilevato.GetExpirationDateString();

                label4.Text = "Oggetto: " + CertificatoRilevato.Subject;

                label5.Text = "Numero seriale: " + CertificatoRilevato.GetSerialNumberString();

                label6.Text = "HAS Certificato: " + CertificatoRilevato.GetCertHashString();

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message);

            }

        }



Conclusioni

L’articolo ha fornito al lettore una tecnica di come rilevare le informazioni del certificato di un file firmato.
La firma digitale è uno scenario che in questi ultimi anni trova sempre più riscontro, soprattutto in questi ultimi due anni con la problematica della pandemia, che ha portato molti enti pubblici ad un intenso uso di questa tecnologia.
Dotare gli applicativi di lettura dei certificati, può tornate utile quando si vuole verificare il file firmato.
Il codice è utilizzabile anche con versioni precedenti del Framework e con ambienti di sviluppo precedenti.

Nessun commento: