ASP.NET – Encriptar y Desencriptar secciones del Web.config

3
ASP.NET – Encriptar y Desencriptar secciones del Web.config Hola a todos. Estube buscando la manera de poder tener mi Web.config seguro para que mis cadenas de conexión (ConnectionStrings), de alguna manera no pudiera ser visualizada por personas que tuvieran acceso al directorio virtual, ya sea en la máquina local o en el mismo servidor. La solución la encontre en este enlace: http://www.onglasses.net/Default.aspx?id=1244 SIGUIENDO EL LINK: Encriptar y desencriptar secciones del Web.config Encriptar y desencriptar secciones del Web.config Configuración protegida RSA y la herramienta Aspnet_regiis.exe. En este artículo se muestra como encriptar y desencriptar secciones del archivo web.config o Machine.config. En algunas ocasiones es importante encriptar los connectionStrings o cualquier otra seccion de estos archivos ya que cualquier persona que tenga acceso a el directorio donde se encuentran ya sea desde la maquina local o por red podria encontrar el servidor y las credenciales a las cual se nonecta la aplicación. Nosotros definimos nuestro connectionStrings en el web.config de la siguiente manera. <connectionStrings> <add name="MyLocalSQLServer" connectionString="Data Source=nombreservidor;Initial Catalog=SegLegalizacion;Persist Security Info=True;User De esta forma definimos el servidor al cual se conecta y las credenciales para autenticarnos en el sevidor seleccionado. Luego creamos nuestra conexión y la abrimos de la siguiente forma. SqlConnection con = new SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MyLocalSQLS erver"].Connectio De esta forma ya accedemos al ConnectionString desde nuestra aplicación. Ahora agregamos el siguiente codigo el cual nos permite crear un proveedor de configuracion protegida.

Transcript of ASP.NET – Encriptar y Desencriptar secciones del Web.config

Page 1: ASP.NET – Encriptar y Desencriptar secciones del Web.config

ASP.NET – Encriptar y Desencriptar secciones del Web.config

Hola a todos.

Estube buscando la manera de poder tener mi Web.config seguro para que mis cadenas de conexión

(ConnectionStrings), de alguna manera no pudiera ser visualizada por personas que tuvieran acceso al

directorio virtual, ya sea en la máquina local o en el mismo servidor.

La solución la encontre en este enlace:

http://www.onglasses.net/Default.aspx?id=1244 SIGUIENDO EL LINK:

Encriptar y desencriptar secciones del Web.config

Encriptar y desencriptar secciones del Web.configConfiguración protegida RSA y la herramienta Aspnet_regiis.exe.

En este artículo se muestra como encriptar y desencriptar secciones del archivo web.config o Machine.config. En

algunas ocasiones es importante encriptar los connectionStrings o cualquier otra seccion de estos archivos ya que

cualquier persona que tenga acceso a el directorio donde se encuentran ya sea desde la maquina local o por red

podria encontrar el servidor y las credenciales a las cual se nonecta la aplicación. Nosotros definimos nuestro

connectionStrings en el web.config de la siguiente manera.

<connectionStrings> <add name="MyLocalSQLServer" connectionString="Data

Source=nombreservidor;Initial Catalog=SegLegalizacion;Persist Security Info=True;User

De esta forma definimos el servidor al cual se conecta y las credenciales para autenticarnos en el sevidor

seleccionado. Luego creamos nuestra conexión y la abrimos de la siguiente forma.

SqlConnection con = new

SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["MyLocalSQLServer"].Connectio

De esta forma ya accedemos al ConnectionString desde nuestra aplicación. Ahora agregamos el siguiente codigo el

cual nos permite crear un proveedor de configuracion protegida.

<configProtectedData> <providers> <add keyContainerName="NetFrameworkConfigurationKey"

useMachineContainer="false" description="Uses RsaCryptoServiceProvider to encrypt and decrypt"

Para encriptar el archivo web.config usaremos aspnet_regiis que nos permite encriptar tanto el web.config local de nuestro proyecto como el publicado en un directorio virtual. La siguiente línea se debe ejecutar en el símbolo del sistema que provee .Net “Visual Studio 2008 Command Prompt” y sirve para encriptar la sección connectionStrings de una aplicación publicada en un directorio virtual llamada Example1. aspnet_regiis -pe "connectionStrings" -app "/Example1" De igual forma la siguiente línea de código permite encriptar la sección connectionStrings de una aplicación cuyo proyecto se encuentra en C:\Projects\Example1. aspnet_regiis.exe -pef "connectionStrings" C:\Projects\Example1 El resultado de la ejecución de cualquiera de estos comandos debe ser satisfactorio. Ya en este momento la sección connectionStrings debe estar encriptada y lucir algo como esto.

Page 2: ASP.NET – Encriptar y Desencriptar secciones del Web.config

  

<connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider"> <EncryptedData

Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#">

Ejecute el siguiente comando desde un símbolo del sistema de .NET

aspnet_regiis -pe "connectionStrings" -app "/UserRSA" -prov "MyUserRSAProtectedConfigurationProvider"

Si en este momento intentaramos conectarnos a la base de datos no podriamos. Para esto no hay que modificar el

codigo simplemente debemos dar permiso al usuario ASP donde esta publicada la aplicación para acceder a esta

informacion. Para allar el usuario al que debemos dar permisos podemos crear una aplicación de prueba y ingresar

el siguiente codigo.

using System.Security.Principal; ... protected void Page_Load(object sender, EventArgs e)

{ Response.Write(WindowsIdentity.GetCurrent().Name); }

Este nos retornara el usuario. Por ultimo agregamos el siguiente comando donde debemos remplazar NT Authority\

Servicio de red por el usuario anteriormente retornado.

aspnet_regiis -pa "NetFrameworkConfigurationKey" "NT Authority\Servicio de red"

De esta forma nuestra aplicación tendrá acceso a esta sección y podrá desencriptarla aunque parece largo y difícil

no lo es. Comandos. Encripcion de directorio virtual. aspnet_regiis -pe "connectionStrings" -app "/Example1"

Encripcion de directorio local. aspnet_regiis.exe -pef "connectionStrings" C:\Projects\Example1 desencripcion de

directorio virtual. aspnet_regiis -pd "connectionStrings" -app "/ Example1"

TOMADO: http://www.onglasses.net/Default.aspx?id=1244

Muchas gracias a Javier Vera Torres por su excelente artículo.