Crittografia

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

In questa pagina
ObiettiviObiettivi
Ambito di applicazioneAmbito di applicazione
Utilizzo del moduloUtilizzo del modulo
RiepilogoRiepilogo
Conoscenze necessarieConoscenze necessarie
Creazione di un componente servito che fornisce i metodi Encrypt e DecryptCreazione di un componente servito che fornisce i metodi Encrypt e Decrypt
Chiamata alla libreria di classi gestita DPAPIChiamata alla libreria di classi gestita DPAPI
Creazione di una classe fittizia per avviare il componente servitoCreazione di una classe fittizia per avviare il componente servito
Creazione di un account di Windows per eseguire l'applicazione di Enterprise Services e il servizio di WindowsCreazione di un account di Windows per eseguire l'applicazione di Enterprise Services e il servizio di Windows
Configurazione, assegnazione di un nome sicuro e registrazione del componente servitoConfigurazione, assegnazione di un nome sicuro e registrazione del componente servito
Creazione di un'applicazione di servizio di Windows per avviare il componente servitoCreazione di un'applicazione di servizio di Windows per avviare il componente servito
Installazione e avvio dell'applicazione del servizio di WindowsInstallazione e avvio dell'applicazione del servizio di Windows
Scrittura di un'applicazione Web per eseguire il test delle routine di crittografia e decrittografiaScrittura di un'applicazione Web per eseguire il test delle routine di crittografia e decrittografia
Modifica dell'applicazione Web per leggere una stringa di connessione crittografata in un file di configurazione dell'applicazione  Modifica dell'applicazione Web per leggere una stringa di connessione crittografata in un file di configurazione dell'applicazione
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.

Creare un componente servito che chiama la libreria di crittografia DPAPI nel contesto di un account di servizio specificato, in modo che DPAPI possa accedere a un archivio di chiavi basato sull'utente allo scopo di crittografare e decrittografare i dati.

Leggere i dati crittografati del file 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 Studio® 1.0 .NET e versioni successive

Microsoft SQL Server ™ 2000 con Service Pack 2 e versioni successive

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 Visual Studio .NET.

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

È necessario aver acquisito esperienza nello sviluppo e nell'implementazione di componenti serviti eseguiti nel contesto di Enterprise Services (COM+).

È necessario aver acquisito esperienza nello sviluppo e nell'implementazione dei servizi Windows.

È necessario conoscere la procedura di creazione degli account utente di Windows mediante l'utilizzo degli strumenti di amministrazione di Windows.

Prima di iniziare a utilizzare questo modulo, è necessario 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. L'applicazione utilizza un componente servito per accedere alla libreria di crittografia DPAPI, in modo da caricare un profilo utente di Windows e consentire alla libreria di crittografia DPAPI di utilizzare un archivio chiavi basato sull'utente.

Conoscenze necessarie

L'approccio descritto in questo modulo utilizza un componente servito .NET eseguito in un'applicazione server (COM+) di Enterprise Services per l'elaborazione dell'interfaccia DPAPI, ciò per le ragioni indicate nella sezione successiva, "Motivi dell'utilizzo di Enterprise Services". Viene utilizzato inoltre un servizio di Windows per le ragioni indicate nella sezione "Motivi dell'utilizzo di un servizio di Windows". La configurazione della soluzione è illustrata nella figura 1.

L'applicazione Web ASP.NET utilizza un componente servito in un'applicazione server di Enterprise Services per interagire con l'interfaccia DPAPI

Figura 1
L'applicazione Web ASP.NET utilizza un componente servito in un'applicazione server di Enterprise Services per interagire con l'interfaccia DPAPI

Nella figura 1 la sequenza degli eventi è la seguente:

1.

Gestione controllo servizi di Windows avvia il servizio Win32® e carica automaticamente il profilo utente associato all'account con il quale viene eseguito il servizio. Per eseguire l'applicazione Enterprise Services viene utilizzato lo stesso account di Windows.

2.

Il servizio Win32 chiama un metodo di esecuzione nel componente servito, che avvia l'applicazione di Enterprise Services e carica il componente servito.

3.

L'applicazione Web recupera la stringa crittografata dal file Web.config.

4.

L'applicazione chiama un metodo per il componente servito, allo scopo di decrittografare la stringa di connessione.

5.

Il componente servito interagisce con DPAPI utilizzando P/Invoke per chiamare le funzioni DPAPI Win32.

6.

La stringa decrittografata viene restituita all'applicazione Web.

Motivi dell'utilizzo di Enterprise Services

Per ottenere una chiave di crittografia, l'interfaccia DPAPI richiede la password dell'account di Windows. L'account utilizzato dall'interfaccia DPAPI viene ottenuto dal token del thread corrente (se il thread che chiama l'interfaccia DPAPI sta eseguendo la rappresentazione) o dal token di processo. Inoltre, se si utilizza l'interfaccia DPAPI con l'archivio utente, è necessario che sia caricato il profilo utente associato all'account. Nel caso di un'applicazione Web ASP.NET che utilizza l'interfaccia DPAPI con l'archivio utente, ciò determina i seguenti problemi:

Le chiamate a DPAPI effettuate da un'applicazione ASP.NET eseguita con l'account ASPNET predefinito avranno esito negativo. in quanto tale account non dispone di un profilo utente caricato.

Se l'applicazione Web ASP.NET è configurata per la rappresentazione dei chiamanti, al thread dell'applicazione sarà associato un token di rappresentazione del thread. La sessione di accesso associata al token di rappresentazione è una sessione di accesso di rete (utilizzata per rappresentare il chiamante sul server). Le sessioni di accesso alla rete non determinano il caricamento di profili utente e inoltre non consentono di derivare una chiave di crittografia dalla password in quanto il server non dispone della password dell'utente rappresentato, a meno che l'applicazione utilizzi l'autenticazione di base.

Per ovviare a tali limitazioni, è possibile utilizzare un componente servito all'interno di un'applicazione server di Enterprise Services con un'identità di processo fissa per fornire servizi di crittografia e di decrittografia mediante l'interfaccia DPAPI.

Motivi dell'utilizzo di un servizio di Windows

In questa soluzione viene utilizzato un servizio di Windows per assicurare che venga caricato automaticamente un profilo utente. Quando Gestione controllo servizi di Windows (SCM, Service Control Manager) avvia un servizio, carica anche il profilo dell'account per il quale è configurata l'esecuzione del servizio.

Quindi il servizio viene utilizzato per caricare il componente servito, determinando l'avvio dell'applicazione server di Enterprise Services in un'istanza di Dllhost.exe.

Poiché il servizio di Windows e il componente servito sono configurati per essere entrambi eseguiti utilizzando lo stesso account con privilegi minimi, il componente servito ha accesso al profilo utente caricato e, di conseguenza, può chiamare le funzioni dell'interfaccia DPAPI per crittografare e decrittografare i dati.

Se il componente servito non viene avviato da un servizio di Windows, che viene quindi escluso da questo scenario, il profilo utente non verrà caricato automaticamente. Sebbene sia possibile chiamare un'API Win32 per caricare un profilo utente (LoadUserProfile), tale interfaccia richiede che il codice chiamante sia incluso nel gruppo Administrators e pertanto non consente l'esecuzione con privilegi minimi.

È necessario che il servizio sia in esecuzione quando vengono chiamati i metodi Encrypt e Decrypt del componente servito. Quando i servizi di Windows vengono interrotti, il profilo configurato viene scaricato automaticamente. A questo punto, i metodi DPAPI all'interno del componente servito vengono interrotti.

Note

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.

L'approccio basato sul profilo utente, adottato in questo modulo, consente di assicurare un livello aggiuntivo di protezione in quanto limita l'accesso 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 1.0).

Per un articolo correlato sull'utilizzo dell'interfaccia DPAPI con l'archivio del computer direttamente da un'applicazione Web ASP.NET, senza alcuna applicazione di Enterprise Services, vedere ""Procedura - Utilizzo dell'interfaccia DPAPI (archivio del computer) da ASP.NET" in questa guida.

Creazione di un componente servito che fornisce i metodi Encrypt e Decrypt

Questa procedura consente di creare un componente servito che espone i metodi Encrypt e Decrypt. In una procedura successiva, tali metodi verranno chiamati da un'applicazione Web ASP.NET per fornire servizi di crittografia.

Per creare un componente servito che fornisce i metodi Encrypt e Decrypt

1.

Avviare Visual Studio .NET e creare un nuovo progetto Libreria di classi Visual C# denominato DPAPIComp.

2.

Utilizzare Esplora soluzioni per rinominare Class1.cs come DataProtectorComp.cs.

3.

All'interno di DataProtectorComp.cs, rinominare Class1 come DataProtectorComp e rinominare di conseguenza in modo appropriato il costruttore predefinito.

4.

Aggiungere un riferimento all'assembly nell'assembly System.EnterpriseServices.dll.

5.

Aggiungere le istruzioni using riportate di seguito all'inizio di DataProtectorComp.cs.

using System.EnterpriseServices; 
using System.Security.Principal; 
using System.Runtime.InteropServices; 

6.

Derivare la classe DataProtectorComp dalla classe ServicedComponent.

public class DataProtectorComp : ServicedComponent 

7.

Aggiungere alla classe DataProtectorComp i due metodi pubblici vuoti seguenti:

public byte[] Encrypt(byte[] plainText) 
{} 
public byte[] Decrypt(byte[] cipherText) 
{}

Chiamata alla libreria di classi gestita DPAPI

Questa procedura consente di chiamare la libreria di classi gestita dell'interfaccia DPAPI per crittografare e decrittografare i dati. Tale libreria di classi incapsula le chiamate alle funzioni DPAPI Win32. Se la libreria di classi non è stata ancora creata, vedere "Procedura - Creazione di una libreria DPAPI" in questa guida.

Per chiamare la libreria di classi gestita DPAPI

1.

Aggiungere un riferimento al file nell'assembly DataProtection.dll.

2.

Aggiungere l'istruzione using riportata di seguito sotto le istruzioni using esistenti in DataProtectorComp.cs.

using DataProtection; 

3.

Aggiungere al metodo Encrypt il codice riportato di seguito per crittografare i dati forniti.

DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE ); 
byte[] cipherText = null; 
try 
{ 
  cipherText = dp.Encrypt(plainText, null); 
} 
catch(Exception ex) 
{ 
  throw new Exception("Exception encrypting. " + ex.Message); 
} 
return cipherText; 

4.

Aggiungere al metodo Decrypt il codice riportato di seguito per decrittografare il testo cifrato fornito.

DataProtector dp = new DataProtector( DataProtector.Store.USE_USER_STORE ); 
byte[] plainText = null; 
try 
{ 
  plainText = dp.Decrypt(cipherText,null); 
} 
catch(Exception ex) 
{ 
  throw new Exception("Exception decrypting. " + ex.Message); 
} 
return plainText; 

Creazione di una classe fittizia per avviare il componente servito

Questa procedura consente di creare una classe fittizia che espone un singolo metodo Launch. Tale metodo verrà chiamato dal servizio di Windows per avviare l'applicazione di Enterprise Services che ospita il componente servito.

Per creare una classe fittizia che avvia il componente servito

1.

Aggiungere una nuova classe Visual C# al progetto e assegnarle il nome Launcher.cs.

2.

Aggiungere alla classe il seguente metodo: che verrà chiamato dal servizio all'avvio.

public bool Launch() 
{ 
  return true; 
} 

3.

Scegliere Genera soluzione dal menu Genera.

Creazione di un account di Windows per eseguire l'applicazione di Enterprise Services e il servizio di Windows

Questa procedura consente di creare un account di Windows da utilizzare per eseguire l'applicazione di Enterprise Services che ospita il componente servito DataProtectorComp e il servizio di Windows. Verrà creato inoltre per il nuovo account un profilo utente, necessario all'interfaccia DPAPI in caso di utilizzo dell'archivio utente.

Per creare un account di Windows per eseguire l'applicazione di Enterprise Services e il servizio di Windows

1.

Creare un nuovo account utente locale denominato DPAPIAccount. Immettere una password, deselezionare la casella di controllo Cambiamento obbligatorio password all'accesso successivo, quindi selezionare la casella di controllo Nessuna scadenza password.

2.

Utilizzare lo strumento Criteri di protezione locali nel gruppo di programmi Strumenti di amministrazione per assegnare all'account i privilegi Accesso locale e Accesso come processo batch.

Per creare un profilo utente per il nuovo account

1.

Disconnettersi da Windows.

2.

Eseguire di nuovo l'accesso utilizzando il nuovo account DPAPIAccount.
Verrà creato un profilo utente per questo account.

3.

Disconnettersi da Windows ed eseguire di nuovo l'accesso con il proprio account di sviluppatore.

Configurazione, assegnazione di un nome sicuro e registrazione del componente servito

Questa procedura consente siglare l'assembly del componente servito, al fine di assegnargli un nome sicuro. Tale operazione è un requisito obbligatorio per gli assembly contenenti componenti serviti. Verranno quindi aggiunti attributi a livello dell'assembly del componente servito, utilizzato per configurare tale componente all'interno del catalogo COM+. Al termine di tale operazione, verrà registrato il componente servito e verrà creata un'applicazione server COM+ host mediante l'utilità Regsvcs.exe. Infine, l'identità "Esegui come" dell'applicazione COM+ verrà impostata sull'account di servizio creato nella procedura precedente.

Per configurare il componente servito, assegnargli un nome sicuro e registrarlo

1.

Aprire una finestra di comando e modificare la directory impostandola sulla cartella del progetto DPAPIComp.

2.

Mediante l'utilità sn.exe generare una coppia di chiavi da utilizzare per firmare l'assembly.

sn -k dpapicomp.snk 

3.

Tornare a Visual Studio .NET e aprire Assemblyinfo.cs.

4.

Individuare l'attributo AssemblyKeyFile e aggiungere il percorso del file di chiave all'interno della cartella del progetto.

[assembly: AssemblyKeyFile(@"..\..\dpapicomp.snk")] 

5.

Aggiungere all'inizio del file l'istruzione using riportata di seguito.

using System.EnterpriseServices; 

6.

Aggiungere gli attributi a livello di assembly riportati di seguito per configurare l'applicazione COM+ come applicazione server e per specificare il nome dell'applicazione.

[assembly: ApplicationActivation(ActivationOption.Server)] 
[assembly: ApplicationName("DPAPI Helper Application")] 

7.

Scegliere Genera soluzione dal menu Genera per generare il progetto del componente servito.

8.

Aprire una finestra di comando e passare alla directory di output del progetto contenente il file DPAPIComp.dll.

9.

Utilizzare regsvcs.exe per registrare il componente servito e creare l'applicazione COM+.

regsvcs DPAPIComp.dll 

10.

Avviare lo snap-in MMC (Microsoft Management Console) di Servizi componenti.

11.

Espandere le cartelle Servizi componenti, Computer, Risorse del computer e ApplicazioniCOM +.

12.

Individuare e fare clic con il pulsante destro del mouse su DPAPI Helper Application, quindi selezionare Proprietà.

13.

Fare clic sulla scheda Attivazione e verificare che il tipo di applicazione sia impostato su Applicazione server.

14.

Fare clic sulla scheda Identità, quindi selezionare il pulsante di opzione Il seguente utente.

15.

Immettere DPAPIAccount come utente, digitare la password corretta, quindi scegliere OK per chiudere la finestra di dialogo Proprietà.

Creazione di un'applicazione di servizio di Windows per avviare il componente servito

Questa procedura consente di creare una semplice applicazione di servizio di Windows che, all'avvio, procederà a eseguire il componente servito. In tal modo, si assicura che il profilo dell'account configurato venga caricato e che il componente servito sia disponibile per la crittografia e la decrittografia dei dati.

Per creare un'applicazione di servizio di Windows che avvia il componente servito

1.

Avviare una nuova istanza di Visual Studio .NET e creare un nuovo progetto di servizio di Windows C# denominato DPAPIService.

2.

Utilizzare Esplora soluzioni per rinominare Service1.cs come DPAPIService.cs.

3.

All'interno di DPAPIService.cs rinominare Service1 come DPAPIService e rinominare di conseguenza in modo appropriato il costruttore predefinito.

4.

All'interno di DPAPIService.cs individuare il metodo InitializedComponent e modificare il nome del servizio in DPAPIService.

5.

Impostare un riferimento agli assembly System.EnterpriseServices.dll e System.Configuration.Install.dll.

6.

Impostare un riferimento al file nell'assembly DPAPIComp.

7.

Aggiungere la seguente istruzione using all'inizio di DPAPIService.cs, sotto le istruzioni using esistenti.

using DPAPIComp; 

8.

Individuare il metodo Main e sostituire il seguente codice:

ServicesToRun = new System.ServiceProcess.ServiceBase[]{new Service1()}; 

con la seguente riga:

ServicesToRun = new System.ServiceProcess.ServiceBase[]{new DPAPIService()}; 

9.

Individuare il metodo OnStart e aggiungere il codice riportato di seguito, che eseguirà il componente DPAPIComp all'avvio del servizio.

Launcher launchComponent = new Launcher(); 
launchComponent.Launch(); 

10.

Aggiungere un nuovo file di classe C# al progetto e assegnare il nome DPAPIServiceInstaller.

11.

Aggiungere all'inizio di DPAPIServiceInstaller le istruzioni using riportate di seguito, sotto l'istruzione using esistente.

using System.ComponentModel; 
using System.ServiceProcess; 
using System.Configuration.Install; 

12.

Derivare la classe DPAPIServiceInstaller dalla classe Installer.

public class DPAPIServiceInstaller : Installer

13.

Aggiungere l'attributo RunInstaller a livello di classe come indicato di seguito.

[RunInstaller(true)] 
public class DPAPIServiceInstaller : Installer 

14.

Aggiungere le due variabili membro private riportate di seguito alla classe DPAPIServiceInstaller. Gli oggetti verranno utilizzati durante l'installazione del servizio.

private ServiceInstaller dpApiInstaller; 
private ServiceProcessInstaller dpApiProcessInstaller; 

15.

Aggiungere il codice riportato di seguito al costruttore della classe DPAPIServiceInstaller.

dpApiInstaller = new ServiceInstaller(); 
dpApiInstaller.StartType = System.ServiceProcess.ServiceStartMode.Manual; 
dpApiInstaller.ServiceName = "DPAPIService"; 
dpApiInstaller.DisplayName = "DPAPI Service"; 
Installers.Add (dpApiInstaller);  
dpApiProcessInstaller = new ServiceProcessInstaller(); 
dpApiProcessInstaller.Account = ServiceAccount.User; 
Installers.Add (dpApiProcessInstaller); 

16.

Scegliere Genera soluzione dal menu Genera.

Installazione e avvio dell'applicazione del servizio di Windows

Questa procedura consente di installare il servizio di Windows mediante l'utilità installutil.exe e di avviare quindi il servizio.

Per installare e avviare l'applicazione del servizio di Windows

1.

Aprire una finestra di comando e modificare la directory impostandola sulla cartella Bin\Debug sotto la cartella del progetto DPAPIService.

2.

Eseguire l'utilità installutil.exe per installare il servizio.

Installutil.exe DPAPIService.exe 

3.

Nella finestra di dialogo Impostazione informazioni di accesso del servizio immettere il nome utente e la password dell'account creato in precedenza nella procedura 4, "Creazione di un account di Windows per eseguire l'applicazione di Enterprise Services e il servizio di Windows", quindi scegliere OK.
Il nome utente deve essere indicato nel formato "autorità\nomeutente".

Visualizzare l'output dall'utilità installutil.exe e verificare che il servizio sia installato correttamente.

4.

Avviare lo snap-in MMC Servizi dal gruppo di programmi Strumenti di amministrazione.

5.

Avviare il servizio DPAPI.

Scrittura di un'applicazione Web per eseguire il test delle routine di crittografia e decrittografia

Questa procedura consente di sviluppare una semplice applicazione Web che verrà utilizzata per eseguire il test delle routine di crittografia e decrittografia. In seguito, l'applicazione verrà inoltre utilizzata per decrittografare i dati conservati all'interno del file web.config.

Per scrivere un'applicazione Web per eseguire il test delle routine di crittografia e decrittografia

1.

Aggiungere un nuovo progetto di applicazione Web C# denominato DPAPIWeb alla soluzione DPAPIComp esistente.

2.

Aggiungere un riferimento all'assembly in System.EnterpriseServices e un riferimento al progetto nel progetto DPAPIComp.

3.

Aprire WebForm1.aspx in modalità progettazione e creare un modulo analogo a quello illustrato nella figura 1. Utilizzare gli ID elencati nella tabella 1 per i singoli controlli.

Tabella 1: ID dei controlli di WebForm1.aspx

ControlloID

Casella di controllo Dati da crittografare

txtDataToEncrypt

Dati crittografati

txtEncryptedData

Dati decrittografati

txtDecryptedData

Pulsante Crittografa

btnEncrypt

Pulsante Decrypt

btnDecrypt

Etichetta Error

lblError

Modulo Web DPAPIWeb

Figura 2
Modulo Web DPAPIWeb

4.

Fare doppio clic sul pulsante Crittografa per visualizzare il gestore eventi ButtonClick.

5.

Aggiungere le seguenti istruzioni using all'inizio del file, sotto le istruzioni using esistenti.

using System.Text; 
using DPAPIComp; 

6.

Tornare al gestore eventi ButtonClick Encrypt e aggiungere il codice riportato di seguito per chiamare il componente servito DataProtectorComp allo scopo di crittografare i dati immessi mediante il modulo Web.

DataProtectorComp dp = new DataProtectorComp(); 
try 
{ 
  byte[] dataToEncrypt = Encoding.ASCII.GetBytes(txtDataToEncrypt.Text); 
  txtEncryptedData.Text = Convert.ToBase64String( 
                                    dp.Encrypt(dataToEncrypt)); 
} 
catch(Exception ex) 
{ 
  lblError.ForeColor = Color.Red; 
  lblError.Text = "Exception.<br>" + ex.Message; 
  return; 
} 
lblError.Text = ""; 

7.

Visualizzare nuovamente il modulo Web e fare doppio clic sul pulsante Decrittografa per creare un gestore eventi ButtonClick.

8.

Aggiungere il codice riportato di seguito al componente servito DataProtectorComp per decrittografare i dati precedentemente crittografati contenuti nel campo txtEncryptedData.

DataProtectorComp dp = new DataProtectorComp(); 
try 
{ 
  byte[] dataToDecrypt = Convert.FromBase64String(txtEncryptedData.Text); 
  txtDecryptedData.Text = Encoding.ASCII.GetString( 
                                  dp.Decrypt(dataToDecrypt)); 
} 
catch(Exception ex) 
{ 
  lblError.ForeColor = Color.Red; 
  lblError.Text = "Exception.<br>" + ex.Message; 
  return; 
} 
lblError.Text = ""; 

9.

Scegliere Genera soluzione dal menu Genera.

10.

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

11.

Immettere una stringa di testo nel campo Dati da crittografare.

12.

Fare clic sul pulsante Crittografa. Verrà eseguita la chiamata al componente servito DataProtector all'interno dell'applicazione COM+. I dati crittografati vengono visualizzati nel campo Dati crittografati.

13.

Fare clic sul pulsante Decrittografa e verificare che la stringa di testo originale venga visualizzata nel campo Dati decrittografati.

14.

Chiudere la finestra del browser.

Nota: se viene visualizzato un messaggio di errore di accesso negato in cui viene indicato che è impossibile leggere il ProgID del componente da HKEY_CLASSES_ROOT, probabilmente sarà necessario eseguire di nuovo Regsvcs.exe per registrare una seconda volta il componente servito.

Questo messaggio di errore viene visualizzato se l'assembly del componente servito è stato ricompilato ma non è stato nuovamente registrato. Poiché la versione dell'assembly cambia a ogni versione intermedia (build) a causa dell'attributo di versione predefinito dell'assembly "1.0.*", per ogni versione intermedia successiva viene generato un nuovo CLSID. L'errore è dovuto al fatto che ASP.NET non può accedere al CLSID nel Registro di sistema in quanto tale dato non esiste ancora. Eseguire nuovamente Regsvcs.exe e riavviare l'applicazione Web per risolvere il problema.

Modifica dell'applicazione Web per leggere una stringa di connessione crittografata in un file di configurazione dell'applicazione

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 in un file di configurazione dell'applicazione

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.

DataProtectorComp dec = new DataProtectorComp(); 
try 
{ 
  string appSettingValue = 
            ConfigurationSettings.AppSettings["connectionString"]; 
  byte[] dataToDecrypt = Convert.FromBase64String(appSettingValue); 
  string connStr = Encoding.ASCII.GetString( 
                               dec.Decrypt(dataToDecrypt)); 
  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 Decrypted data.

Altre risorse

"Windows Data Protection" all'indirizzo:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnsecure/html/windataprotection-dpapi.asp (in inglese).

"Procedura - Creazione di una libreria DPAPI" in questa guida

"Procedura - Utilizzo dell'interfaccia DPAPI (archivio del computer) da ASP.NET" in questa guida


**
In questo articolo
**