NET: Encriptar secciones de web.config

22 11 2010

A menudo cuando desarrollamos aplicaciones Web (normalmente como extensiones de MSCRM) utilizamos el archivo web.config de la aplicación web para almacenar variables globales de la aplicaciones. Así por ejemplo, solemos añadir las cadenas de conexión a datos que posteriormente usaremos en la aplicación para conectar a bases de datos… Es muy importante saber que normalmente, el acceso al archivo web.config desde el navegador debe estar restringido pero, puede suceder que por alguna configuración ajena se permita este acceso. Por tanto, cualquier información que estemos añadiendo en este archivo de texto, puede comprometer la seguridad de nuestro sistema o puede estar ofreciendo al usuario información no deseada. En algunas instalaciones he llegado a ver que en este archivo se introduce incluso el password sin encriptar del usuario administrador de MSCRM!!!.

Figura 1. Error al acceder a web.config desde u navegador

Pues bien, además de intentar no introducir información clave en este archivo, si nos es necesario podemos optar por la opción de cifrar ciertas secciones de este archivo. Así por ejemplo, imaginad que tuviéramos definida una cadena de conexión a datos sobre la base de datos CRM en nuestro archivo web.config:


<connectionStrings>
<add name="strConn" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=MINHAC_MSCRM;Server=." />
</connectionStrings>

En este caso, la cadena de conexión no contiene usuario y password pues se utiliza la autenticación de Windows (la más recomendada en estos casos) para acceder al SQL Server). Sin embargo si trabajáramos con autenticación de SQL Server (poco recomendable) aparecería el usuario y la clave!!!.

Para encriptar esta sección y cifrar su contenido tan sólo necesitamos ejecutar un comando propio de NET Framework. Debemos situarnos en el directorio del NET Framework correspondiente a la aplicación Web (normalmente, si estamos en CRM 4.0, la versión de NET Framework es la 2.0) y ejecutar el siguiente comando:

Tras ejecutar este comando podremos observar que la sección connectionStrings de nuestro web.config ha sido encriptado:


<connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
<EncryptedData>
<CipherData> <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAA3I15yxfdeUywFzxPgNcnwwQAAAACAAAAAAADZgAAqAAAABAAAAB3OUG0nsxHtLh8yzBw6VtjAAAAAASAAACgAAAAEAAAAOSsEyXru5ZMGH6CC1uompVoAQAAsj8zgTP6NrsguTxVWPv0xm6Y04836QDdJ4r6yt/9XqN70ToMQABZqWnEnaSaqDDWIZaEEt/0OmJCxJXiedVomhKf2S0I+fMTBVLSLqj4pKaqSjlNjQgSfa+EoKZz5u7o3AxC4zhQS5TJ7nqdgIzIwe+upxfVUJpH0//m41u1rarWdrI/k3nUzlsvz3f7eiVyfsnk+PQ9QWXbWnIqPpFizAmGOcwbhWtk7AzT2VkMg2xdwZFYg4hpTXFYHqaU5XXocryrdHBxrj2zjE+h+4NURC3mmCd8NPEkpe2iGydJo75F1dHsuToGc9E3XRiDwHmB2dVXQkcNFxkdgS7Z6eRhJGdBVri5TYq6U1Gj8kIUe6g4CwkUnZaW8F3FjSWf3Lfl8KZLLG6OCBmwcyQEwUw06BVQah4KfKE8fHZHabI5EMWFaQ11ywsXs0YEJg+XdkHv+mUOocl3qAF+Y25GfYVgSm5JI5SyqvMHFAAAAJUDQ5kizMW2E+7oqVbIEhAbyUyK
</CipherValue>
</CipherData>
</EncryptedData>
</connectionStrings>

Esta acción no requiere que en el código de la página ASP.NET en la que usemos esta cadena de conexión realicemos ninguna acción especial pues es el propio IIS el que realiza la encriptación y desencriptación y por tanto, al leer la cadena desde la págia ASPX, IIS ya realiza el descifrado.

Para recuperar el archivo original, tan sólo es necesario utilizar el mismo comando con otro parámetro:

Tan sólo hay que tener presente un par de cuestiones:

1. El cifrado depende de la máquina donde está instalado IIS por tanto, si tenemos dos entornos NO podemos copiar el archivo web.config con secciones cifradas de un servidor a otro pues en el nuevo no se interpretaría el cifrado. Debe ejecutarse el comando individualmente en ambos servidores

2. Existen dos tipos de cifrado (que indicamos en el parámetro –prov) que se pueden usar: DataProtectionConfiguratioProvider y RsaProtectionConfigurationProvider. Al desencriptar no es necesario indicar el proveedor pues ya se especifica en el archivo

Anuncios

Acciones

Information

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




A %d blogueros les gusta esto: