Developer's Diary

26 diciembre, 2010

ASP.NET, Web Farm Server Error (Errores en las granjas de servidores webs)

Filed under: .net, ASP.Net, Seguridad, Web — jnavero @ 11:33 AM

—- Nos mudamos: http://devthisblog.namocode.es
—————————————————————–
Cuando publicamos una pagina web en ASP en ocasiones nos encontramos con un error similar al siguiente:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Esto es debido (entre otras cosas y a groso modo para que se entienda la idea) a que el servidor donde estamos publicando la pagina web tiene servidores de replica (por asi decirlo) y cuando intentamos acceder a nuestra pagina accedemos al servidor principal, coge la pagina de los servidores de replica y la intenta mostrar. Dicha pagina está cifrada, pero la peticion de la pagina realmente no la hemos hecho nosotros si no el servidor, cuando nos intenta mostrar la pagina las credenciales no son correctas y esto hace que se estropee todo y salga el dichoso error. Como he dicho anteriormente esto es un poco la idea a groso modo.

La solucion se puede encontrar en un articulo muy bueno por cierto de la msdn
está se basa en modificar la clausula machinekey de forma manual
algo asi como el ejemplo mostrado a continuacion:

El validationKey se puede calcular con el siguiente programa (adjunto Cod. Fuente)
Este código fuente está copiado de la pagina de Microsoft (Debajo mencionada). Esta clausula especifica la Key que se usará para validar los datos.

Por otro lado, el decryptionKey es la llave que usaremos para encriptar / desencriptar los datos. según la pagina de microsoft con ejecutar dos veces el programa (de debajo) y pegar los dos codigos es suficiente, sin embargo he comprobado que en funcion de la version (IIS / ASP), es posible que no funcione exactamente asi, debido a que no soporta un decryptionKey de mas de 48 caracteres hexadecimales, en funcion de la configuracion.

La clausula validation le especificamos manualmente el algoritmo de validacion de la key. (En nuestro caso, hemos puesto SHA1).

La clausula decryptionEspecifica el algoritmo que usará para encriptar o desepcriptar los datos del form de autenticacion

Este código genera una Key aleatoria.
———— CORTAR DESDE AQUI ——————–
using System;
using System.Text;
using System.Security;
using System.Security.Cryptography;

class App {
static void Main(string[] argv) {
int len = 128;
if (argv.Length > 0)
len = int.Parse(argv[0]);
byte[] buff = new byte[len/2];
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
rng.GetBytes(buff);
StringBuilder sb = new StringBuilder(len);
for (int i=0; i<buff.Length; i++)
sb.Append(string.Format(“{0:X2}”, buff[i]));
Console.WriteLine(sb);
}
}
———– HASTA AQUI —————-

Podemos ver toda la informacion de la configuracion de la clausula machinekey en la siguiente pagina:
http://msdn.microsoft.com/en-us/library/ff649308.aspx

Anuncios

1 comentario »

  1. La pagina de tu Blog se ha actualizado…

    [..]Articulo Indexado Correctamente en la Blogosfera de Sysmaya[..]…

    Trackback por Articulo Indexado en la Blogosfera de Sysmaya — 26 diciembre, 2010 @ 6:04 PM


RSS feed for comments on this post. TrackBack URI

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: