Crittografia

Utilizzo dell'interfaccia DPAPI (archivio del computer) da ASP.NET

In questa pagina
ObiettiviObiettivi
Ambito di applicazioneAmbito di applicazione
Utilizzo del moduloUtilizzo del modulo
RiepilogoRiepilogo
Prima di iniziarePrima di iniziare
Creazione di un'applicazione Web client ASP.NETCreazione di un'applicazione Web client ASP.NET
Test dell'applicazioneTest dell'applicazione
Modifica dell'applicazione Web per leggere una stringa di connessione crittografata dal file web.ConfigModifica dell'applicazione Web per leggere una stringa di connessione crittografata dal file web.Config
Altre risorseAltre risorse

Obiettivi

Il modulo consente di:

Creare un'applicazione Web che utilizza la libreria di crittografia DPAPI generata nella sezione "Procedura - Creazione di una libreria DPAPI" per crittografare e decrittografare dati riservati da proteggere.

Leggere i dati crittografati di Web.config.

Ambito di applicazione

Le informazioni contenute in questo modulo sono valide per i seguenti prodotti e tecnologie:

Microsoft® Windows® XP o Windows 2000 Server con Service Pack 3 e sistemi operativi successivi

Microsoft .NET Framework versione 1.0 con Service Pack 2

Microsoft Visual C#® .NET

Utilizzo del modulo

Per trarre il massimo vantaggio dal modulo:

È necessario aver acquisito esperienza nell'utilizzo di Visual C# .NET e Microsoft Visual Studio® .NET.

È necessario aver acquisito esperienza nello sviluppo di applicazioni Web mediante l'utilizzo di ASP.NET.

Creare la libreria di crittografia DPAPI descritta in "Procedura - Creazione di una libreria DPAPI". Questa libreria include la funzionalità utilizzata in questo modulo per crittografare e decrittografare i dati.

Riepilogo

Per le applicazioni Web, spesso è necessario archiviare nei file di configurazione delle applicazioni alcuni dati di protezione, quali le stringhe di connessione al database e le credenziali degli account di servizio. Per motivi di sicurezza, è consigliabile non archiviare mai questo tipo di informazioni in formato testo normale, ma crittografarli sempre prima dell'archiviazione.

In questo modulo viene descritto come utilizzare la libreria di crittografia DPAPI creata in "Procedura - Creazione di una libreria DPAPI" a partire da un'applicazione ASP.NET per proteggere dati riservati nonché come leggere le informazioni crittografate archiviate nel file Web.config. In questo modulo viene mostrato come utilizzare l'archivio chiavi DPAPI basato sul computer.

Prima di iniziare

Prima di utilizzare questo modulo, tenere presente quanto segue:

DPAPI è in grado di funzionare con l'archivio del computer o con l'archivio dell'utente (che richiede il caricamento di un profilo utente). DPAPI utilizza per impostazione predefinita l'archivio dell'utente, ma è possibile specificare che deve essere utilizzato l'archivio del computer passando il flag CRYPTPROTECT_LOCAL_MACHINE alle funzioni DPAPI.

La soluzione del profilo utente offre un livello di protezione aggiuntivo, perché limita gli utenti che possono accedere alle informazioni riservate. I dati possono essere decrittografati solo dall'utente che li ha crittografati. L'utilizzo del profilo utente richiede tuttavia interventi di sviluppo aggiuntivi se DPAPI viene eseguito da un'applicazione Web ASP.NET, perché è necessario caricare e scaricare in modo esplicito un profilo utente (operazione che non viene eseguita automaticamente da ASP.NET).

L'approccio basato sull'archivio del computer, adottato in questa procedura, richiede un processo di sviluppo meno complesso in quanto non è necessario gestire il profilo utente. A meno che non si utilizzi un parametro di entropia aggiuntivo, risulta tuttavia meno sicura perché qualsiasi utente del computer è in grado di decrittografare i dati. (Il valore di entropia è un valore casuale che rende più difficile la decrittografia delle informazioni riservate). L'utilizzo di un parametro di entropia aggiuntivo comporta il fatto che l'applicazione deve memorizzarlo in modalità protetta e quindi implica un altro problema di gestione della chiave.

Nota: se si utilizza DPAPI con l'archivio del computer, la stringa crittografata è specifica di un determinato computer e pertanto è necessario generare i dati crittografati in ogni computer. Non copiare i dati crittografati nei computer di una farm o di un cluster.

Per un modulo correlato sull'utilizzo dell'interfaccia DPAPI con l'archivio utente da un'applicazione Web ASP.NET mediante un componente servito all'interno di un'applicazione di Enterprise Services, vedere "Procedura - Utilizzo dell'interfaccia DPAPI (archivio utente) da ASP.NET con Enterprise Services" in questa guida.

Creazione di un'applicazione Web client ASP.NET

Questa procedura consente di creare un'applicazione Web client ASP.NET che chiamerà la libreria di classi DPAPI per crittografare e decrittografare i dati archiviati all'interno del file web.config.

Per creare un'applicazione Web client ASP.NET

1.

Avviare Visual Studio .NET e creare una nuova applicazione Web ASP.NET Visual C# denominata DPAPIClientWeb.

2.

Aggiungere un riferimento all'assembly DataProtector.dll, creato precedentemente in ""Procedura - Creazione di una libreria DPAPI".

3.

Aprire WebForm1.aspx.cs e aggiungere le istruzioni using riportate di seguito all'inizio del file, sotto le istruzioni using esistenti.

using System.Text;
using DataProtection;

4.

Aggiungere a WebForm1.aspx i controlli elencati nella tabella 1.

Tabella 1: Controlli di WebForm1.aspx

Tipo di controlloTestoID

Pulsante

Pulsante Crittografa

btnEncrypt

Pulsante

Decrittografa

btnDecrypt

Casella di testo

 

txtDataToEncrypt

Casella di testo

 

txtEncryptedData

Casella di testo

 

txtDecryptedData

Etichetta

 

lblError

Etichetta

Dati da crittografare

 

Etichetta

Dati crittografati

 

Etichetta

Dati decrittografati

 

Il modulo Web sarà simile a quello illustrato nella figura 1.

Modulo Web DPAPIClientWeb

Figura 1
Modulo Web DPAPIClientWeb

5.

Fare doppio clic sul pulsante Crittografa per creare un gestore eventi ButtonClick.

DataProtector dp = new DataProtector( DataProtector.Store.
USE_MACHINE_STORE );try
{
  byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text);
  // Not passing optional entropy in this example
  // Could pass random value (stored by the application) for added 
  security
  // when using DPAPI with the machine store.
  txtEncryptedData.Text =
                Convert.ToBase64String(dp.Encrypt(dataToEncrypt,null));
}
catch(Exception ex)
{
  lblError.ForeColor = Color.Red;
  lblError.Text = "Exception.<br>" + ex.Message;
  return;
}
lblError.Text = "";

6.

Tornare al modulo Web e fare doppio clic sul pulsante Decrittografa. Aggiungere al gestore eventi ButtonClick il seguente codice:

DataProtector dp = new DataProtector(DataProtector.
Store.USE_MACHINE_STORE);try
{
  byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text);
  // Optional entropy parameter is null. 
  // If entropy was used within the Encrypt method, the same entropy
   parameter
  // must be supplied here
  txtDecryptedData.Text = 
                     Encoding.ASCII.GetString(dp.Decrypt(dataToDe
                     crypt,null));
}
catch(Exception ex)
{
  lblError.ForeColor = Color.Red;
  lblError.Text = "Exception.<br>" + ex.Message;
  return;
}
lblError.Text = "";

7.

Scegliere Genera soluzione dal menu Genera.

Test dell'applicazione

Questa procedura consente di eseguire il test dell'applicazione per verificare che i dati siano stati crittografati e decrittografati correttamente.

Per eseguire il test dell'applicazione

1.

Premere Ctrl+F5 per eseguire l'applicazione Web.

2.

Immettere una stringa nella casella di testo Dati da crittografare e fare clic su Crittografa.
Verificare che i dati crittografati nel formato di codifica Base64 siano visualizzati nella casella di testo Dati crittografati.

3.

Fare clic sul pulsante Decrittografa.
Verificare che i dati crittografati siano decrittografati e visualizzati correttamente nella casella di testo Dati decrittografati.

Modifica dell'applicazione Web per leggere una stringa di connessione crittografata dal file web.Config

Questa procedura consente di estrarre una stringa di connessione al database crittografata e di inserire il testo crittografato nel file Web.config dell'applicazione all'interno di un elemento <appSettings>. Quindi verrà aggiunto il codice per leggere e decrittografare questa stringa dal file di configurazione.

Per modificare l'applicazione Web per leggere una stringa di connessione crittografata dal file web.config

1.

Tornare a Visual Studio .NET e visualizzare WebForm1.aspx in modalità progettazione.

2.

Aggiungere un altro pulsante al modulo. Impostare la proprietà Text su Decrypt string from config file e la proprietà ID su btnDecryptConfig.

3.

Fare doppio clic sul pulsante per creare un gestore eventi ButtonClick.

4.

Aggiungere l'istruzione using riportata di seguito all'inizio del file, sotto le istruzioni using esistenti.

using System.Configuration;

5.

Tornare al gestore eventi btnDecryptConfig_Click e aggiungere il codice riportato di seguito per recuperare una stringa di connessione al database dalla sezione <appSettings> del file Web.config.

DataProtector dp = new DataProtector(DataProtector.
Store.USE_MACHINE_STORE);try
{
  string appSettingValue =
            ConfigurationSettings.AppSettings["connectionString"];
  byte[] dataToDecrypt = Convert.FromBase64String(app
  SettingValue);
  string connStr = Encoding.ASCII.GetString(
                               dp.Decrypt(dataToDecrypt,null));
  txtDecryptedData.Text = connStr;
}
catch(Exception ex)
{
  lblError.ForeColor = Color.Red;
  lblError.Text = "Exception.<br>" + ex.Message;
  return;
}
lblError.Text = "";

6.

Scegliere Genera soluzione dal menu Genera per generare nuovamente i progetti.

7.

Fare clic con il pulsante destro del mouse su WebForm1.aspx, quindi scegliere Visualizza nel browser.

8.

Nel campo Dati da crittografare immettere una stringa di connessione al database analoga alla seguente:

server=(local);Integrated Security=SSPI; database=Northwind

9.

Fare clic sul pulsante Crittografa.

10.

Selezionare il testo crittografato e copiarlo negli Appunti.

11.

Passare a Visual Studio .NET, aprire il file Web.config e aggiungere l'elemento <appSettings> riportato di seguito all'esterno dell'elemento <system.web>. Assegnare la stringa di connessione crittografata contenuta negli Appunti all'attributo value.

<appSettings>
   <add key="connectionString" value="encrypted connection string" /> 
</appSettings>

12.

Salvare il file web.config.

13.

Fare clic sul pulsante Decrypt string from config file e verificare che la stringa di connessione al database crittografata venga letta correttamente dal file Web.config e che la stringa decrittografata sia visualizzata correttamente nel campo Dati decrittografati.

Altre risorse

Per ulteriori informazioni, vedere i seguenti moduli correlati:

"Procedura - Creazione di una libreria DPAPI".

"Procedura - Utilizzo dell'interfaccia DPAPI (archivio utente) da ASP.NET con Enterprise Services".


**
In questo articolo
**