Encriptado de secciones del web.config


Entre las mejoras de ASP.NET 2.0 se encuentra la facilidad de tomar una sección del archivo Web.config y encriptarla (cifrarla) para proteger la información sensible contenida en el mismo, tal como las cadenas de conexión a la bases de datos.

Antes una aclaración, bajo condiciones normales el archivo Web.config no es enviado al cliente web por lo que su información no puede ser leída de esa manera. No obstante si algún atacante lograra tener acceso al sistema de archivos del servidor podría leer el archivo Web.config. Por ello desde ASP.NET 1.x se ha tratado de resolver este escenario para proteger la información sensible, principalmente de cadenas de conexión, con medidas como:

  • Colocarla en el Machine.config en lugar del Web.config.
  • Almacenarla en el Registro del sistema con Aspnet_setreg.
  • Encriptarla dentro del Web.config

Esta última se consigue generando las claves de manera manual y utilizando clases propias o de terceros para facilitar las tareas de encriptado/desencriptado.

Mas ahora con ASP.NET 2.0 resulta más sencillo encriptar ciertas secciones del Web.config donde se acostumbra a almacenar información sensible, tales como: <appSettings>, <connectionStrings>, <identity> y <sessionState>; mientras que la tarea de des-encriptado se realiza de manera automática en tiempo de ejecución.

Nota: Para secciones distintas a las listadas anteriormente se deberá utilizar la herramienta Aspnet_setreg. Leer acerca de la misma en: How to use the ASP.NET utility to encrypt credentials and session state connection strings.

Para encriptar las secciones del Web.config de manera programática podemos utilizar la clase ConfigurationSection. Pero bajo el emblema de "seguro por diseño" es mejor hacerlo utilizando herramienta aspnet_regiis.exe —que habitualmente se utiliza para registrar el ASP.NET ISAPI en IIS— ubicada en el mismo directorio del .NET Framework 2.0 y que ahora nos permite realizar la tarea que nos ocupa con la siguiente sintaxis

aspnet_regiis -pe "Seccion" -app "RutaVirtual"

O bien empleando la ruta al directorio donde se encuentra el Web.config:

aspnet_regiis -pef "Seccion" "RutaFisica"

Para conocer la lista completa de parámetros y modificadores leer: ASP.NET IIS Registration Tool (Aspnet_regiis.exe)

Por ejemplo si deseamos encriptar la sección <connectionStrings> de la aplicación web "http://localhost/ejemplo&quot;:

>aspnet_regiis -pe "connectionStrings" -app "/ejemplo"

Por omisión se emplea el Proveedor de Encriptado RSAProtectedConfigurationProvider, aunque podemos utilizar también el DPAPIProtectedConfigurationProvider si lo especificamos con la opción -prov de la herramienta y el valor "DataProtectionConfigurationProvider":

>aspnet_regiis -pe "connectionStrings" -app "/ejemplo"
–prov "DataProtectionConfigurationProvider"

Así mismo por omisión las claves privadas se almacenan en ubicaciones a nivel de Sistema:

  • \Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys, con RSA, y
  • %windir%\system32\Microsoft\Protect\S-1-5-18, para DPAPI

Pero se pueden almacenar también a nivel de Usuario, para ello se necesitan realizar algunos pasos adicionales y especificar el Proveedor de Encriptado Personalizado a emplear con la opción -prov de la herramienta.

También podemos utilizar aspnet_regiis para des-encriptar las secciones previamente encriptadas, pero lo normal es que permanezcan encriptadas y sea durante la ejecución de la aplicación donde se lleve a cabo la tarea de des-encriptado, lo cual se lleva a cabo de manera automática por parte del ConfigurationManager al momento de leer la información del Web.config:

strMyConnString = _
ConfigurationManager.ConnectionStrings.Get("MyConnString").ConnectionString

Para mayor información leer el par de artículos:

Acerca de Willy Mejia

Developer, Techie, Human... http://about.me/willyxoft
Esta entrada fue publicada en .NET, ASP.NET. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s