Entrar a esta ruta :
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727
Ejecutar:
aspnet_regiis.exe -pef "connectionStrings" "C:\miRaizIIS\MisitioWeb" -prov "DataProtectionConfigurationProvider"
Que indica que queremos cifrar la sección "connectionStrings" del web.config ubicado en "C:\MiRaiz\MiStioWeb", usando para ello el proveedor de la DPAPI (más sobre esto ahora).
De este modo obtendremos una cadena del estilo de esta:
(he quitado la mayor parte de la cadena cifrada porque es muy larga).
Lo más estupendo de esto es que no tendremos que tocar ni una sola línea de nuestro código para que funcione, ya que ASP.NET descifra de manera transparente la cadena de conexión al leerla desde la configuración.
Con el parámetro -prov (opcional) podremos especificar el proveedor de cifrado que queremos utilizar. Por defecto se nos proporcionan dos: el mecionado "DataProtectionConfigurationProvider" que cifra usando la DPAPI (Data Protection API de Windows), o bien el "RsaProtectedConfigurationProvider", que usa una pareja de claves pública/privada para cifrar y descifrar, y es el que se usará por defecto si no especificamos ninguno. Si quisiésemos usar un cifrado propio podemos construir una clase proveedora y especificarla con -prov al usar esta herramienta.
Desde mi punto de vista es mejor usar siempre DPAPI, ya que es una criptogra´fia muy segura y está atada por completo al equipo en el que se ha realizado el cifrado. De este modo aunque alguien lograse leer el archivo web.config y llevárselo a otro equipo no podría descifrarlo. Por este mismo motivo, una nota de precaución: debes usar esta técnica directamente en el servidor en el que va a estar la aplicación funcionando, puesto que si por ejemplo cifras en tu equipo de desarrollo y luego lo mueves a un servidor de producción, no se podrá descifrar la sección una vez allí. Así que haz el cifrado en el equipo donde va a funcionar la aplicación.
Se puede cifrar cualquier sección del web.config, y no sólo la de las cadenas de conexión. Las únicas que no se pueden cifrar son estas:
*
*
*
*
*
*
*
*
*
*
Las demás no hay problema ninguno si las ciframos, y se usarán del mismo modo, siendo el descifrado transparente para el programador.
¿Y si me olvido de lo que ponía y necesito volver a tenerlas en claro?
No hay problema. Podemos usar el mismo ejecutable con la opción -pdf para descifrar:
aspnet_regiis.exe -pdf "connectionStrings" " C:\miRaizIIS\MisitioWeb"
Con esto conseguiremos que la sección vuelva a mostrar su contenido en claro.