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

Aggiornamento: novembre 2007

Viene illustrato un esempio dettagliato di crittografia delle sezioni di un file di configurazione per un'applicazione ASP.NET.

La configurazione protetta permette di migliorare la protezione di un'applicazione tramite la crittografia delle informazioni riservate memorizzate in un file Web.config. È possibile utilizzare aspnet_regiis.exe per crittografare sezioni del file Web.config nonché gestire le chiavi di crittografia. In ASP.NET il file di configurazione viene decrittografato durante la relativa elaborazione. Pertanto, la decrittografia non richiede l'utilizzo di codice aggiuntivo. Per ulteriori informazioni sulla configurazione protetta, vedere Crittografia delle informazioni di configurazione utilizzando la configurazione protetta.

Nella procedura vengono illustrate le seguenti operazioni:

  • Crittografia di sezioni di un file Web.config mediante il provider di configurazione protetta predefinito.

  • Accesso alle informazioni di configurazione decrittografata in una pagina ASP.NET.

Prerequisiti

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

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. In questa procedura dettagliata viene utilizzato il provider RsaProtectedConfigurationProvider predefinito specificato nel file Machine.config e denominato "RsaProtectedConfigurationProvider". Il contenitore di chiavi RSA utilizzato dal provider RsaProtectedConfigurationProvider predefinito si chiama "NetFrameworkConfigurationKey".

Per concedere all'identità ASP.NET accesso in lettura al contenitore di chiavi RSA predefinito

  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:

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

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

    • L'opzione -pa, seguita dal nome del contenitore di chiavi RSA per l'oggetto RsaProtectedConfigurationProvider predefinito.

    • 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 "NetFrameworkConfigurationKey" a livello di computer.

    Nota:

    Per i computer con Microsoft Windows Server 2003 in cui la rappresentazione relativa a un'applicazione ASP.NET è disattivata nel file Web.config, l'identità dell'applicazione è costituita dall'identità del pool di applicazioni. Per impostazione predefinita, si tratta dell'account NETWORK SERVICE (nelle versioni precedenti di Windows, l'identità è l'account ASPNET locale).

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

    Non chiudere la finestra del prompt dei comandi.

Crittografia di sezioni del file Web.config

Ora che l'identità dell'applicazione ASP.NET dispone di accesso in lettura al contenitore di chiavi RSA per l'oggetto RsaProtectedConfigurationProvider predefinito, si procederà alla crittografia delle sezioni del file Web.config relativo all'applicazione ASP.NET utilizzando tale contenitore di chiavi. Verrà quindi eseguita la decrittografia delle sezioni durante l'elaborazione del file Web.config in ASP.NET.

Per crittografare le sezioni <connectionStrings> e <machineKey> del file Web.config

  1. In un editor di testo aprire il file Web.config dell'applicazione.

    • Se non si dispone di un file Web.config per l'applicazione ASP.NET, aprire un editor di testo, copiare la configurazione di esempio in un nuovo file e quindi salvare il file nella directory dell'applicazione ASP.NET come web.config.
  2. Assicurarsi che sia presente sia un elemento figlio <connectionStrings> che un elemento figlio <machineKey> per l'elemento <system.web>, come illustrato nell'esempio riportato di seguito.

    <configuration>
       <connectionStrings>
          <add name="SqlServices" connectionString="Data Source=localhost;Integrated Security=SSPI;Initial Catalog=Northwind;" />
       </connectionStrings>
    
       <system.web>
    
         <machineKey validationKey="D61B3C89CB33A2F1422FF158AFF7320E8DB8CB5CDA1742572A487D94018787EF42682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE"
           decryptionKey="FBF50941F22D6A3B229EA593F24C41203DA6837F1122EF17" />
    
       </system.web>
    </configuration>
    
  3. Chiudere il file Web.config.

  4. Al prompt dei comandi immettere la directory nella directory .NET Framework versione 2.0 digitando il seguente comando:

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

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

    • L'opzione -pe e la stringa "connectionStrings" per crittografare l'elemento connectionStrings del file Web.config per l'applicazione.

    • L'opzione -app e il nome dell'applicazione.

    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"

  6. Ripetere il passaggio precedente per l'elemento figlio <machineKey> dell'elemento <system.web>, come illustrato nel seguente esempio:

    aspnet_regiis -pe "system.web/machineKey" -app "/MyApplication"

    Non chiudere la finestra del prompt dei comandi.

  7. 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>
    
       <connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider">
          <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>
    
       <system.web>
         <machineKey configProtectionProvider="RsaProtectedConfigurationProvider">
           <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>IwUopItbWX0mJdGWtAqE1LlsG3u5RBRlAXs9/GZj3HEfeUXduHVF76q6Ip88YqlfLthH+DMBYdOZAF+hCOmS2agfTo1tKUvELRGIljS/BqEYxUO+/IOz9tllAw8ZlGF7AVCzptgIejI+iLXEZfMKW7f6EMGeb5vaaKXHIkYZwcM=
                   </CipherValue>
                 </CipherData>
               </EncryptedKey>
             </KeyInfo>
             <CipherData>
               <CipherValue>ivVyERVPNUzIb/i7/NUbRkxsxh8IG959vycwrzJO0vYWxHZ5i03SfrLbsGUV17+FxZ6lbcrVaF5FY3zVm7dRMRvQpVFwaVcL
               </CipherValue>
             </CipherData>
           </EncryptedData>
         </machineKey>
    
       </system.web>
    </configuration>
    
  8. 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" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script >
    
    Public Sub Page_Load()
    
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings
      ConnectionStringsGrid.DataBind()
    
      Dim config As System.Configuration.Configuration = _
        WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath)
      Dim key As MachineKeySection = _
        CType(config.GetSection("system.web/machineKey"), MachineKeySection)
      DecryptionKey.Text = key.DecryptionKey
      ValidationKey.Text = key.ValidationKey
    
    End Sub
    
    </script>
    <html>
    
    <body>
    
    <form >
    
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </form>
    
    </body>
    </html>
    
    <%@ Page Language="C#" %>
    <%@ Import Namespace="System.Configuration" %>
    <%@ Import Namespace="System.Web.Configuration" %>
    <script >
    
    public void Page_Load()
    {
      ConnectionStringsGrid.DataSource = ConfigurationManager.ConnectionStrings;
      ConnectionStringsGrid.DataBind();
    
      Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath);
      MachineKeySection key = 
        (MachineKeySection)config.GetSection("system.web/machineKey");
      DecryptionKey.Text = key.DecryptionKey;
      ValidationKey.Text = key.ValidationKey;
    }
    
    </script>
    <html>
    
    <body>
    
    <form >
    
      <asp:GridView  CellPadding="4" id="ConnectionStringsGrid" />
      <P>
      MachineKey.DecryptionKey = <asp:Label runat="Server" id="DecryptionKey" /><BR>
      MachineKey.ValidationKey = <asp:Label runat="Server" id="ValidationKey" />
    
    </form>
    
    </body>
    </html>
    
  2. Salvare il file come walkthrough.aspx e visualizzarlo nel browser.

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

  3. Se si desidera che le informazioni riservate contenute nel sito Web restino private, eliminare il file walkthrough.aspx al termine di questa procedura dettagliata.

Passaggi successivi

Se si desidera, è possibile decrittografare il contenuto del file Web.config crittografato, eseguendo aspnet_regiis.exe con l'opzione -pd. La sintassi è identica a quella utilizzata per la crittografia del contenuto del file Web.config con l'opzione -pe, con l'eccezione che non viene specificato un provider di configurazione protetta. Il provider appropriato viene identificato utilizzando l'elemento configProtectionProvider relativo alla sezione protected. I comandi che seguono, ad esempio, decrittografano l'elemento <connectionStrings> e l'elemento figlio <machineKey> dell'elemento <system.web> nel file Web.config per l'applicazione ASP.NET denominata MyApplication.

aspnet_regiis -pd "connectionStrings" -app "/MyApplication"

aspnet_regiis -pd "system.web/machineKey" -app "/MyApplication"

Vedere anche

Attività

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

Altre risorse

Crittografia delle informazioni di configurazione utilizzando la configurazione protetta