In questa paginaObiettiviIl 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 applicazioneLe 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 moduloPer 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. |
RiepilogoPer 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 iniziarePrima 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.NETQuesta 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 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.  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'applicazioneQuesta 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.ConfigQuesta 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 risorsePer ulteriori informazioni, vedere i seguenti moduli correlati:
| |