Vamos a utilizar el proveedor de configuración protegida
RSA y la herramienta aspnet_regiis.exe para poder lograr la encriptación de secciones del Web.Config.
Es posible importar y exportar las claves RSA de un servidor a otro, esto nos ayudará a utilizar el mismo cifrado en varios servidores.
Para encriptar la sección connectionString del Web.Config vamos a realizar los siguientes pasos:
1. Vamos a crear un sitio llamado EncriptacionRSA
2. Vamos a agregar el siguiente código en la sección connectionString dentro del archivo Web.Config
< connectionStrings >
< add name="MyLocalSQLServer"
connectionString="Initial Catalog=northwind;
data source=localhost;user id=sa;password=password"
providerName="System.Data.SqlClient"/ >
< /connectionStrings >
3. Ahora vamos a la línea de comandos para ejecutar la siguiente instrucción:
%WinDir%\Microsoft.NET\Framework\
El comando anterior, con el modificador -app, asume que hay un directorio virtual IIS llamado MachineRSA. Si está utilizando el servidor Web de Visual Studio .NET 2005 en lugar de IIS, utilizaremos el modificador -pef, que nos permitirá especificar la ubicación física del directorio del Web.Config
%WinDir%\Microsoft.NET\Framework\
Si el comando es ejecutado de forma correcta deberemos de obtener el siguiente resultado:
Encrypting configuration section...
Succeeded!
Las claves RSA se almacenan en la siguiente ruta:
\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys
Una vez que ejecutamos esto, en el archivo Web.Config tendremos el siguiente resultado:
< connectionStrings configProtectionProvider="RsaProtectedConfigurationProvider" > < EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element" xmlns="http://www.w3.org/2001/04/xmlenc#" >
< EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" / >
< KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#" >
< EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#" >
< EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" / >
< KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#" >
< KeyName >Rsa Key< /KeyName >
< /KeyInfo >
< CipherData >
< CipherValue>R7cyuRk+SXJoimz7wlOpJr/YLeADGnwJVcmElHbrG/B5dDTE4C9
rzSmmTsbJ9Xcl2oDQt1qYma9L7pzQsQQYqLrkajqJ4i6ZQH1cmiot8ja7Vh+yItes7TRU
1AoXN9T0mbX5H1Axm0O3X/285/MdXXTUlPkDMAZXmzNVeEJHSCE=
< /CipherValue >
< /CipherData >
< /EncryptedKey >
< /KeyInfo >
< CipherData >
< CipherValue>d2++QtjcVwIkJLsye+dNJbCveORxeWiVSJIbcQQqAFofhay1wMci8FFlb
QWttiRYFcvxrmVfNSxoZV8GjfPtppiodhOzQZ+0/QIFiU9Cifqh/T/7JyFkFSn13bTKjbYmHObKA
zZ+Eg6gCXBxsVErzH9GRphlsz5ru1BytFYxo/lUGRvZfpLHLYWRuFyLXnxNoAGfL1mpQM7M46x5Y
WRMsNsNEKTo/PU9/Jvnh/lT+GlcgCs2JRpyzSfKE7zSJH+TpIRtd86PwQ5HG3Pd2frYdYw0rmlml
I9D
< /CipherValue >
< /CipherData >
< /EncryptedData >
< /connectionStrings >
Ahora vamos a comprobar si el encriptación y desencriptación funciona correctamente, para esto vamos a nuestra página Default.aspx y vamos a agregar el siguiente código de la sección HTML
< %@ Page Language="C#" % >
< script runat="server" >
protected void Page_Load(object sender, EventArgs e) {
Response.Write("Clear text connection string is: " + ConfigurationManager.ConnectionStrings
["MyLocalSQLServer"].ConnectionString);
}
< /script >
< html >
< body/ >
< /html >
MyLocalSQLServer es la cadena de conexión que especificamos en el Web.Config
Por último para regresar la sección del configurationString a su estado original vamos a ocupar el siguiente comando:
%WinDir%\Microsoft.NET\Framework\
y para si ocupamos una ruta física ocupamos el siguiente comando:
%WinDir%\Microsoft.NET\Framework\
Si el comando funciona correctamente obtendremos el siguiente resultado:
Decrypting configuration section...
Succeeded!
Esto funciona para IIS6?, IIS7?, wserver 2003? 2008?
ResponderBorrar