Procedura dettagliata: creazione ed esportazione di un contenitore di chiavi RSA

Aggiornamento: novembre 2007

Viene fornito un esempio dettagliato della procedura di creazione, esportazione e importazione di una chiave di crittografia utilizzata per decrittografare sezioni di Web.config crittografate da un unico file crittografato su più server.

La configurazione protetta permette di migliorare la protezione di un'applicazione tramite la crittografia delle informazioni riservate memorizzate in un file di configurazione. .NET Framework permette di decrittografare automaticamente il file di configurazione al momento dell'elaborazione e la decrittografia non richiede codice aggiuntivo. È possibile utilizzare aspnet_regiis.exe per crittografare sezioni del file di configurazione nonché gestire le chiavi di crittografia. Per ulteriori informazioni sulla configurazione protetta, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.

La configurazione protetta consente di creare, eliminare, esportare e importare chiavi di crittografia personalizzate da utilizzare con il provider RsaProtectedConfigurationProvider. In questo modo è possibile creare copie di backup delle chiavi di crittografia o copiare una chiave di crittografia in più server Web, ad esempio in una Web farm, per poter copiare un'applicazione con un file Web.config crittografato in più percorsi.

Nella procedura vengono illustrate le seguenti operazioni:

  • Creare un contenitore di chiavi RSA personalizzato.

  • Specificare un provider di configurazione protetta che utilizzi un contenitore di chiavi RSA personalizzato.

  • Crittografare sezioni di un file Web.config utilizzando un contenitore di chiavi RSA personalizzato.

  • Esportare un contenitore di chiavi RSA personalizzato in un file XML.

  • Importare un contenitore di chiavi RSA personalizzato da un file XML.

Prerequisiti

Per completare questa procedura dettagliata, è necessario disporre dei seguenti elementi:

  • Microsoft IIS (Internet Information Services) installato e configurato nel computer che ospiterà il sito.

    Per informazioni dettagliate sull'installazione e la configurazione di IIS, vedere la Guida in linea inclusa nell'installazione IIS oppure consultare Internet Information Services (IIS) 6.0 Technical Resources (informazioni in lingua inglese).

  • Un sito Web ASP.NET.

    Se si dispone già di un sito Web, è possibile utilizzarlo per questa procedura dettagliata. In caso contrario, per informazioni dettagliate sulla creazione di un sito Web o di una directory virtuale, vedere Procedura: creare e configurare directory virtuali in IIS 5.0 e 6.0.

Creazione di un contenitore di chiavi RSA personalizzato

In questa parte della procedura dettagliata verrà creato un contenitore di chiavi RSA utilizzando aspnet_regiis.exe con l'opzione -pc che identifica tale contenitore come contenitore di chiavi a livello utente. I contenitori di chiavi RSA devono essere identificati a livello utente tramite l'opzione -pku o a livello di computer omettendo tale opzione. Per ulteriori informazioni sui contenitori di chiavi RSA a livello utente o di computer, vedere Informazioni sui contenitori di chiavi RSA a livello di computer e utente.

Per creare un contenitore di chiavi RSA a livello di computer

  1. Aprire un prompt dei comandi.

    • A tale scopo, in Microsoft Windows fare clic sul pulsante Start, scegliere Esegui, digitare cmd nella casella Apri e quindi fare clic su OK.
  2. Al prompt dei comandi immettere il comando riportato di seguito per passare alla directory .NET Framework versione 2.0.

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  3. Creare un nuovo contenitore di chiavi RSA a livello di computer eseguendo aspnet_regiis.exe con le seguenti opzioni:

    • L'opzione -pc seguita dal nome del contenitore di chiavi RSA, per creare la coppia di chiavi RSA.

    • L'opzione -exp, per assicurarsi che la chiave sia esportabile.

    Il comando che segue consentirà di creare il contenitore di chiavi "MyKeys".

    aspnet_regiis -pc "MyKeys" -exp

    Non chiudere la finestra del prompt dei comandi.

Concessione dell'accesso in lettura a una chiave di crittografia RSA

Prima che ASP.NET possa decrittografare le informazioni crittografate presenti nel file Web.config, è necessario che l'identità dell'applicazione ASP.NET disponga di accesso in lettura alla chiave di crittografia utilizzata per crittografare e decrittografare le sezioni del file.

Per concedere all'identità di ASP.NET l'accesso al contenitore di chiavi RSA

  1. Aprire un editor di testo e copiare il codice che segue in un nuovo file.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. Salvare il file nella directory dell'applicazione come identity.aspx.

  3. Per stabilire l'identità dell'applicazione ASP.NET, aprire identity.aspx in un browser.

    L'identità rappresentata dell'applicazione ASP.NET verrà visualizzata nel browser.

    Nota:

    Per questa procedura dettagliata non utilizzare l'autenticazione della rappresentazione per il sito, ovvero utilizzare solo l'autenticazione anonima come identità dell'applicazione ASP.NET. Se per questa procedura dettagliata l'identità dell'applicazione corrisponde all'ID utente con il quale è stato eseguito l'accesso, ad esempio DOMAIN\idutente, disattivare la rappresentazione nel file Web.config dell'applicazione. A tale scopo, modificare il file Web.config e rimuovere l'elemento <identity>. Dopo aver effettuato questa modifica, aggiornare il file identity.aspx nel browser in modo da visualizzare l'identità modificata per l'applicazione.

  4. Al prompt dei comandi utilizzare le opzioni seguenti per concedere l'accesso dell'identità al contenitore di chiavi RSA mediante l'esecuzione di aspnet_regiis.exe:

    • L'opzione -pa seguita dal nome del contenitore di chiavi RSA "MyKeys".

    • L'identità dell'applicazione ASP.NET, come determinata nel passaggio precedente.

    Il comando che segue consente, ad esempio, di concedere all'account NETWORK SERVICE l'accesso al contenitore di chiavi RSA "MyKeys" a livello di computer.

    Nota:

    In un computer con Windows Server 2003 in cui la rappresentazione relativa a un'applicazione ASP.NET è disattivata nel file Web.config, l'identità dell'applicazione è costituita dall'account NETWORK SERVICE (per le versioni precedenti di Windows, si tratta dell'account ASPNET locale).

    aspnet_regiis -pa "MyKeys" "NT AUTHORITY\NETWORK SERVICE"

Specifica di un provider di configurazione protetta

In questa parte della procedura dettagliata verrà specificata un'istanza di un provider di configurazione protetta nel file Web.config dell'applicazione ASP.NET. L'istanza di un provider di configurazione protetta che utilizza il contenitore di chiavi RSA a livello di computer denominato "MyKeys" è quella creata nella procedura precedente.

Per specificare un'istanza del provider di configurazione protetta

  1. Aprire un editor di testo e visualizzare il file Web.config dell'applicazione ASP.NET.

    • Se l'applicazione ASP.NET non dispone di un file Web.config, aprire un editor di testo e copiare la configurazione di esempio in un nuovo file. Salvare il file nella directory dell'applicazione ASP.NET come web.config.
  2. Verificare che la configurazione includa un elemento <connectionStrings>, come mostrato nell'esempio che segue.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  3. Aggiungere una sezione <configProtectedData> che includa un'istanza della classe RsaProtectedConfigurationProvider denominata "MyProvider" che utilizza il contenitore di chiavi RSA a livello di computer denominato "MyKeys",, come illustrato nell'esempio che segue.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    </configuration>
    
  4. Salvare e chiudere il file Web.config.

Crittografia di sezioni del file Web.config

Dopo aver specificato un'istanza della classe RsaProtectedConfigurationProvider che utilizza il contenitore di chiavi RSA "MyKeys" per il quale l'identità dell'applicazione ASP.NET dispone di accesso in lettura, si procederà alla crittografia delle sezioni del file Web.config dell'applicazione ASP.NET utilizzando "MyKeys". Successivamente, tali sezioni verranno decrittografate in ASP.NET durante l'elaborazione del file Web.config.

Per crittografare la sezione <connectionStrings> del file Web.config

  1. Al prompt dei comandi eseguire aspnet_regiis.exe con le seguenti opzioni:

    • L'opzione -pe seguita da "connectionStrings", per crittografare l'elemento <connectionStrings> del file Web.config dell'applicazione.

    • L'opzione -app, per identificare il nome dell'applicazione.

    • L'opzione -prov seguita da "MyProvider", per identificare il provider RsaProtectedConfigurationProvider specificato nel file Web.config nella sezione precedente.

    Il comando che segue, ad esempio, esegue la crittografia della sezione <connectionStrings> del file Web.config per un'applicazione denominata MyApplication.

    aspnet_regiis -pe "connectionStrings" -app "/MyApplication" -prov "MyProvider"

  2. Aprire il file Web.config e visualizzare il contenuto crittografato.

    Tale contenuto sarà simile a quello del file Web.config di esempio riportato di seguito.

    <configuration>
       <configProtectedData>
          <providers>
             <add name="MyProvider"
                  type="System.Configuration.RsaProtectedConfigurationProvider, System.Configuration, Version=2.0. 0.0,
                        Culture=neutral, PublicKeyToken= b03f5f7f11d50a3a,
                        processorArchitecture=MSIL"
                  keyContainerName="MyKeys" 
                  useMachineContainer="true" />
          </providers>
       </configProtectedData>
    
       <connectionStrings configProtectionProvider="MyProvider">
          <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
             xmlns="http://www.w3.org/2001/04/xmlenc#">
             <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
             <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
                   <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
                   <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
                      <KeyName>RSA Key
                      </KeyName>
                   </KeyInfo>
                   <CipherData>
                      <CipherValue>WcFEbDX8VyLfAsVK8g6hZVAG1674ZFc1kWH0BoazgOwdBfinhcAmQmnIn0oHtZ5tO2EXGl+dyh10giEmO9NemH4YZk+iMIln+ItcEay9CGWMXSen9UQLpcQHQqMJErZiPK4qPZaRWwqckLqriCl9X8x9OE7jKIsO2Ibapwj+1Jo=
                      </CipherValue>
                   </CipherData>
                </EncryptedKey>
             </KeyInfo>
             <CipherData>
                <CipherValue>OpWQgQbq2wBZEGYAeV8WF82yz6q5WNFIj3rcuQ8gT0MP97aO9SHIZWwNggSEi2Ywi4oMaHX9p0NaJXG76aoMR9L/WasAxEwzQz3fexFgFSrGPful/5txSPTAGcqUb1PEBVlB9CA71UXIGVCPTiwF7zYDu8sSHhWa0fNXqVHHdLQYy1DfhXS3cO61vW5e/KYmKOGA4mjqT0VZaXgb9tVeGBDhjPh5ZlrLMNfYSozeJ+m2Lsm7hnF6VvFm3fFMXa6+h0JTHeCXBdmzg/vQb0u3oejSGzB4ly+V9O0T4Yxkwn9KVDW58PHOeRT2//3iZfJfWV2NZ4e6vj4Byjf81o3JVNgRjmm9hr9blVbbT3Q8/j5zJ+TElCn6zPHvnuB70iG2KPJXqAj2GBzBk6cHq+WNebOQNWIb7dTPumuZK0yW1XDZ5gkfBuqgn8hmosTE7mCvieP9rgATf6qgLgdA6zYyVV6WDjo1qbCV807lczxa3bF5KzKaVUSq5FS1SpdZKAE6/kkr0Ps++CE=
                </CipherValue>
             </CipherData>
          </EncryptedData>
       </connectionStrings>
    </configuration>
    
  3. Chiudere il file Web.config.

Accesso alle impostazioni di configurazione decrittografate

In ASP.NET il contenuto del file Web.config viene decrittografato automaticamente al momento dell'elaborazione del file. Pertanto, non sono necessari passaggi aggiuntivi per decrittografare le impostazioni di configurazione crittografate perché vengano utilizzate con altre funzionalità ASP.NET o per accedere ai valori nel codice. È tuttavia possibile seguire la procedura riportata di seguito se si desidera visualizzare le impostazioni decrittografate.

Per visualizzare i valori di configurazione decrittografati

  1. Aprire un editor di testo e copiare il codice ASP.NET che segue in un nuovo file.

    <%@ Page Language="VB" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <script >
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    }
    
    </script>
    <html>
    
    <body>
    
    <form >
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
    </form>
    
    </body>
    </html>
    
  2. Salvare il file come walkthrough.aspx e visualizzarlo nel browser.

    Verranno visualizzati i valori decrittografati del file Web.config crittografato.

Esportazione e importazione di un contenitore di chiavi RSA

È possibile esportare un contenitore di chiavi RSA in un file XML come copia di backup dei valori delle chiavi o copiare il contenitore di chiavi in server Web aggiuntivi che ospiteranno una copia dell'applicazione che include il file Web.config crittografato. Senza lo specifico contenitore di chiavi RSA utilizzato per crittografare il file Web.config, ASP.NET non sarà in grado di decrittografare i valori di configurazione crittografati.

Per visualizzare i valori di configurazione decrittografati

  1. Al prompt dei comandi eseguire aspnet_regiis.exe con le seguenti opzioni:

    • L'opzione -px seguita da "MyKeys", ovvero il nome del contenitore di chiavi RSA creato nella sezione "Creazione di un contenitore di chiavi RSA personalizzato" riportata in precedenza in questa procedura.

    • Il percorso di un file xml in cui esportare il contenitore di chiavi.

    • L'opzione -pri, per assicurarsi che le informazioni sulla chiave privata vengano esportate. In caso contrario, le informazioni sulla chiave esportate consentiranno solo la crittografia dei dati e non la decrittografia.

    Il comando che segue consente, ad esempio, di esportare il contenitore di chiavi RSA a livello di computer denominato "MyKeys" in un file xml della directory principale dell'unità C denominato keys.xml.

    aspnet_regiis -px "MyKeys" "c:\keys.xml" -pri

    Nota:

    Per assicurarsi che nessun utente sia in grado di decrittografare i file Web.config crittografati dal contenitore di chiavi RSA, dopo aver esportato tale contenitore in un file xml, copiare quest'ultimo in un percorso esterno al server Web e quindi eliminarlo dal server Web.

    A questo punto si disporrà di tutte le informazioni necessarie per copiare l'applicazione utilizzando il file Web.config crittografato in un server Web separato.

  2. Se si desidera copiare l'applicazione utilizzando il file Web.config crittografato in un server Web separato, andare al passaggio 4.

  3. Se non si dispone di un secondo server Web in cui copiare l'applicazione Web e si desidera continuare questa procedura dettagliata, completare i passaggi riportati di seguito per eliminare il contenitore di chiavi RSA dal server Web. Trattare quindi il server Web come se fosse il secondo server Web.

    1. Per eliminare il contenitore di chiavi RSA, al prompt dei comandi eseguire aspnet_regiis.exe con l'opzione -pz seguita da "MyKeys".

      Ad esempio, il seguente comando elimina "MyKeys":

      aspnet_regiis -pz "MyKeys"

    2. Andare al passaggio 5.

  4. Copiare l'applicazione Web, incluso il file Web.config crittografato, in un secondo server Web.

    • Se non si conosce la procedura per copiare l'applicazione Web in un secondo server, copiare l'intera cartella e il contenuto dell'applicazione esistente nel secondo server Web, quindi seguire i passaggi descritti in Procedura: creare e configurare directory virtuali in IIS 5.0 e 6.0 per identificare l'applicazione come applicazione Web.
  5. Sul secondo server aprire una finestra del prompt dei comandi e immettere il seguente comando per passare alla directory di .NET Framework versione 2.0:

    cd \WINDOWS\Microsoft.Net\Framework\v2.0.*

  6. Copiare il file xml che include il contenitore di chiavi RSA esportato nella directory di .NET Framework versione 2.0 sul secondo server Web.

    In questa procedura dettagliata il file keys.xml verrà copiato nella directory principale dell'unità C.

  7. Sul secondo server Web, al prompt dei comandi, eseguire aspnet_regiis.exe con le seguenti opzioni:

    • L'opzione -pi seguita da "MyKeys", ovvero il nome del contenitore di chiavi esportato, per importare il contenitore di chiavi RSA.

    • Il percorso del file xml che include il contenitore di chiavi esportato

    Il comando che segue consente, ad esempio, di importare il contenitore di chiavi RSA denominato "MyKeys".

    aspnet_regiis -pi "MyKeys" "c:\keys.xml"

  8. Sul secondo server Web eliminare la copia del file xml che include il contenitore di chiavi RSA esportato.

  9. Sul secondo server Web determinare l'identità dell'applicazione ASP.NET e concederle l'accesso al contenitore di chiavi RSA importato, seguendo i passaggi descritti nella sezione "Concessione dell'accesso in lettura a una chiave di crittografia RSA" riportata in precedenza in questa procedura.

  10. Sul secondo server Web visualizzare le impostazioni di configurazione decrittografate dal file Web.config crittografato seguendo i passaggi riportati nella sezione precedente.

Vedere anche

Attività

Procedura dettagliata: crittografia delle informazioni di configurazione utilizzando la configurazione protetta

Altre risorse

Crittografia delle informazioni di configurazione utilizzando la configurazione protetta