Compartir a través de


Cómo: Proteger cadenas de conexión al utilizar controles de origen de datos

Actualización: noviembre 2007

Al trabajar con controles de origen de datos debe centralizar la ubicación de las cadenas de conexión situándolas en el archivo Web.config de la aplicación. Los beneficios son dobles: los controles del origen de datos podrían hacer referencia al nombre de la cadena de conexión del archivo de configuración en lugar de incluir la cadena de conexión como una propiedad de control; y la administración del sitio es más fácil porque la administración de cadenas de conexión es centralizada, lo que elimina la necesidad de volver a visitar páginas individuales si la información de las cadenas de conexión cambia.

En este tema aprenderá a colocar las cadenas de conexión dentro del archivo Web.config utilizando Visual Studio y un control de origen de datos, y cómo utilizar la utilidad de la línea de comandos, Aspnet_regiis.exe, para cifrar esas cadenas de conexión para obtener una capa de seguridad adicional.

Cómo agregar una cadena de conexión a Web.config con un control de origen de datos

  1. Abra una página .aspx en la vista Diseño en Visual Studio.

  2. En el Cuadro de herramientas, en la carpeta Datos, arrastre un control de origen de datos, por ejemplo un control SqlDataSource, hasta la superficie de diseño.

  3. Haga clic con el botón secundario del mouse en el control y, a continuación, haga clic en Mostrar etiqueta inteligente.

  4. En el panel de etiquetas inteligentes, haga clic en Configurar origen de datos.

  5. En el panel Elegir una conexión de datos, haga clic en Nueva conexión.

  6. Seleccione un origen de datos adecuado de la lista en el cuadro de diálogo Elegir una conexión de datos, y luego haga clic en Aceptar.

  7. Indique el nombre de servidor, nombre de usuario y contraseña correctos en el cuadro de diálogo Agregar conexión, y después haga clic en Aceptar.

    Regresa al cuadro de diálogo Configurar origen de datos con un resumen de los detalles de su conexión.

  8. Haga clic en Siguiente, y luego en para guardar su cadena de conexión en el archivo Web.config.

    La cadena de conexión ahora se almacena en el archivo Web.config y puede configurar los detalles de la consulta para su control.

Para cifrar la información de la cadena de conexión almacenada en el archivo Web.config

  1. En la línea de comandos de Windows, ejecute la herramienta Registro de IIS de ASP.NET (Aspnet_regiis.exe) con las opciones siguientes:

    • La opción -pe, pasándole la cadena "connectionStrings" para cifrar el elemento connectionStrings.

    • La opción -app, pasándole el nombre de su aplicación.

    La herramienta Aspnet_regiis.exe está ubicada en la carpeta %systemroot%\Microsoft.NET\Framework\númeroDeVersión.

    En el ejemplo siguiente se muestra cómo se cifra la sección connectionStrings del archivo Web.config de una aplicación denominada SampleApplication.

    aspnet_regiis -pe "connectionStrings" -app "/SampleApplication"
    

    Cuando el comando haya finalizado, puede ver el contenido del archivo Web.config. La sección de configuración connectionStrings contendrá información cifrada en vez de una cadena de conexión de texto no cifrado, como se muestra en el ejemplo siguiente.

    <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>
    </configuration>
    

    Deje el símbolo del sistema abierto para los pasos posteriores.

  2. Determine la cuenta de usuario o identidad con la que se ejecuta ASP.NET recuperando el nombre de WindowsIdentity actual.

    En el siguiente ejemplo de código se muestra una forma de determinar el nombre de WindowsIdentity.

    <%@ Page Language="VB" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name)
    %>
    
    <%@ Page Language="C#" %>
    <%
    Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name);
    %>
    
    Nota:

    De forma predeterminada, en Windows Server 2003 con suplantación de una aplicación ASP.NET deshabilitada en el archivo Web.config, la identidad con la que se ejecuta está en la cuenta NETWORK SERVICE. En las otras versiones de Windows, ASP.NET se ejecuta bajo la cuenta ASPNET local.

    La cuenta de usuario o la identidad con la que se ejecuta ASP.NET debe tener acceso de Lectura a la clave de cifrado utilizada para cifrar y descifrar las secciones del archivo Web.config. En este procedimiento se supone que su sitio Web se configura con el RsaProtectedConfigurationProvider predeterminado especificado en el archivo Machine.config denominado "RsaProtectedConfigurationProvider". El contenedor de claves RSA utilizado por el RsaProtectedConfigurationProvider predeterminado se denomina "NetFrameworkConfigurationKey".

  3. En el símbolo del sistema, ejecute la herramienta Aspnet_regiis.exe con las opciones siguientes:

    • La opción -pa, pasándole el nombre del contenedor de claves RSA del RsaProtectedConfigurationProvider predeterminado

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

    En el ejemplo siguiente se muestra cómo conceder el acceso de la cuenta NETWORK SERVICE al contenedor de claves RSA de "NetFrameworkConfigurationKey" en el nivel de equipo.

    aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT AUTHORITY\NETWORK SERVICE"
    
  4. Para descifrar el contenido cifrado del archivo Web.config, ejecute la herramienta 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, excepto que no se especifica ningún proveedor de configuración protegido. Se identifica el proveedor adecuado en el atributo configProtectionProvider para la sección protegida.

    En el siguiente ejemplo de código se muestra cómo descifrar el elemento connectionStrings de la aplicación ASP.NET SampleApplication.

    aspnet_regiis -pd "connectionStrings" -app "/SampleApplication"
    

Vea también

Otros recursos

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