NET: Encriptar secciones de web.config

9 02 2011

Recupero un viejo artículo que publiqué en nuestro blog interno pues, a pesar de que el tiempo pasa, hay temas que no cambian y a veces debemos recuperar.

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 trabajaramos 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+sBAAAA3I15yxfdeUywFzxPgNcnwwQAAAACAAAAAAADZgAAqAAAABAAAAB3OUG0nsx
HtLh8yzBw6VtjAAAAAASAAACgAAAAEAAAAOSsEyXru5ZMGH6CC1uompVoAQAAsj8zgTP6NrsguTxVWPv0xm6Y04836QDdJ4r6yt/9XqN
70ToMQABZqWnEnaSaqDDWIZaEEt/0OmJCxJXiedVomhKf2S0I+fMTBVLSLqj4pKaqSjlNjQgSfa+EoKZz5u7o3AxC4zhQS5TJ7nqdgIz
Iwe+upxfVUJpH0//m41u1rarWdrI/k3nUzlsvz3f7eiVyfsnk+PQ9QWXbWnIqPpFizAmGOcwbhWtk7AzT2VkMg2xdwZFYg4hpTXFYHqa
U5XXocryrdHBxrj2zjE+h+4NURC3mmCd8NPEkpe2iGydJo75F1dHsuToGc9E3XRiDwHmB2dVXQkcNFxkdgS7Z6eRhJGdBVri5TYq6U1G
j8kIUe6g4CwkUnZaW8F3FjSWf3Lfl8KZLLG6OCBmwcyQEwUw06BVQah4KfKE8fHZHabI5EMWFaQ11ywsXs0YEJg+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ágina 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

One response

16 02 2011
facebook layouts

thnx bro

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: