Tutorial: Cifrar la información de configuración mediante la configuración protegida

Actualización: noviembre 2007

Proporciona un ejemplo paso a paso del cifrado de secciones de un archivo de configuración de una aplicación ASP.NET.

La configuración protegida ayuda a mejorar la seguridad de una aplicación permitiéndole cifrar información confidencial almacenada en un archivo Web.config. Puede utilizar aspnet_regiis.exe para cifrar secciones del archivo Web.config y administrar las claves de cifrado. ASP.NET descifra el archivo de configuración cuando lo procesa. Por consiguiente, el descifrado no requiere código adicional. Para obtener más información sobre la configuración protegida, vea Cifrar información de configuración mediante una configuración protegida.

Durante este tutorial aprenderá a realizar lo siguiente:

  • Cifrar secciones de un archivo Web.config utilizando el proveedor de configuración protegida predeterminado.

  • Obtener acceso a información de configuración descifrada de en una página ASP.NET.

Requisitos previos

Para poder completar este tutorial, necesitará lo siguiente:

Conceder acceso de lectura a una clave de cifrado RSA

Para que ASP.NET pueda descifrar la información cifrada del archivo Web.config, la identidad de la aplicación ASP.NET deberá tener acceso de lectura a la clave de cifrado usada para cifrar y descifrar las secciones cifradas. Este tutorial utiliza el proveedor RsaProtectedConfigurationProvider predeterminado que se especifica en el archivo Machine.config y se denomina "RsaProtectedConfigurationProvider". El contenedor de claves RSA utilizado por el proveedor RsaProtectedConfigurationProvider predeterminado se denomina "NetFrameworkConfigurationKey".

Para conceder acceso de lectura a la identidad ASP.NET al contenedor de claves RSA predeterminado

  1. Abra un editor de texto y copie el código siguiente en un nuevo archivo.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
  2. Guarde el archivo en el directorio de la aplicación como identity.aspx.

  3. Para determinar la identidad de su aplicación ASP.NET, abra identity.aspx en un explorador.

    La identidad suplantada de la aplicación ASP.NET se muestra en el explorador.

    Nota:

    Dado que está utilizando IIS en este tutorial, no utilice la suplantación para la autenticación del sitio. Es decir, para este tutorial, utilice sólo la autenticación anónima como la identidad de la aplicación ASP.NET. Si la identidad de la aplicación es el id. de usuario con el que ha iniciado la sesión actual, como DOMAIN\myuserid, en el archivo Web.config de la aplicación, deshabilite la suplantación. Para deshabilitar la suplantación en el archivo Web.config, abra el archivo Web.config y, a continuación, quite el elemento <identity>. Después de quitar el elemento <identity>, actualice identity.aspx en su explorador para mostrar la identidad modificada para la aplicación.

  4. En el símbolo del sistema, ejecute aspnet_regiis.exe con las opciones siguientes:

    • La opción -pa, seguida del nombre del contenedor de claves RSA del objeto RsaProtectedConfigurationProvider predeterminado.

    • La identidad de la aplicación ASP.NET, como se determinó en el paso anterior.

    Por ejemplo, el comando siguiente concede a la cuenta NETWORK SERVICE acceso al contenedor de claves RSA "NetFrameworkConfigurationKey" en el nivel de equipo.

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

    No cierre la ventana del símbolo del sistema.

Cifrar secciones del archivo Web.config

Ahora que la identidad de la aplicación ASP.NET tiene acceso de lectura al contenedor de claves RSA del objeto RsaProtectedConfigurationProvider predeterminado, cifrará las secciones del archivo Web.config de la aplicación ASP.NET utilizando ese contenedor de claves. ASP.NET descifrará las secciones cuando procese el archivo Web.config.

Para cifrar las secciones < connectionStrings > y < machineKey > del archivo Web.config

  1. En un editor de texto, abra el archivo Web.config de la aplicación.

    • Si no tiene un archivo Web.config para la aplicación ASP.NET, abra un editor de texto, copie la configuración de ejemplo en un archivo nuevo y, después, guarde el archivo como web.config en el directorio de la aplicación ASP.NET.
  2. Asegúrese de que el elemento <system.web> tiene un elemento secundario <connectionStrings> y un elemento secundario <machineKey>, como se muestra en el ejemplo siguiente.

    <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. Cierre el archivo Web.config.

  4. En el símbolo del sistema, escriba el comando siguiente para cambiar al directorio de .NET Framework 2.0:

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

  5. En el símbolo del sistema, ejecute aspnet_regiis.exe con las opciones siguientes:

    • La opción -pe y la cadena "connectionStrings" para cifrar el elemento connectionStrings del archivo Web.config de la aplicación.

    • La opción -app y el nombre de su aplicación.

    Por ejemplo, el comando siguiente cifra la sección <connectionStrings> del archivo Web.config de una aplicación denominada MyApplication.

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

  6. Repita el paso anterior para el elemento secundario <machineKey> del elemento <system.web>, como se muestra en el ejemplo siguiente.

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

    No cierre la ventana del símbolo del sistema.

  7. Abra Web.config y vea el contenido cifrado.

    El contenido será similar al del siguiente archivo Web.config de ejemplo.

    <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. Cierre el archivo Web.config.

Obtener acceso a las opciones de configuración cifradas

ASP.NET descifra automáticamente el contenido del archivo Web.config cuando lo procesa. Por esta razón, no se necesita ningún paso adicional para descifrar los valores de configuración cifrados para que los usen otras funciones de ASP.NET o para tener acceso a los valores del código. Sin embargo, puede seguir los pasos siguientes para ver la configuración descifrada.

Para ver los valores de configuración descifrados

  1. Abra un editor de texto y copie el código ASP.NET siguiente en un nuevo archivo.

    <%@ 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. Guarde el archivo como walkthrough.aspx y, a continuación, vea el archivo en el explorador.

    Verá los valores descifrados de su archivo Web.config cifrado.

  3. Para mantener la privacidad de la información confidencial del sitio Web, elimine el archivo walkthrough.aspx cuando haya terminado este tutorial.

Pasos siguientes

Si lo desea, puede descifrar el contenido del archivo Web.config cifrado ejecutando aspnet_regiis.exe con la opción -pd. La sintaxis es igual que la usada para cifrar el contenido del archivo Web.config con la opción -pe, con la diferencia de que no se especifica ningún proveedor de configuración protegida. El proveedor correspondiente se identifica mediante el elemento configProtectionProvider de la sección protected. Por ejemplo, los comandos siguientes descifran el elemento <connectionStrings> y el elemento secundario <machineKey> del elemento <system.web> en el archivo Web.config de la aplicación ASP.NET denominada MyApplication.

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

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

Vea también

Tareas

Tutorial: Crear y exportar un contenedor de claves RSA

Otros recursos

Cifrar información de configuración mediante una configuración protegida