2008-11-21 18 views
30

Tengo una aplicación ASP.NET 2.0 que funciona bien en nuestro entorno local. Cuando se publica en un servidor de prueba, recibimos errores intermitentes en el servidor."Padding no es válido y no se puede eliminar" excepción en WebResource.axd

Aquí es la más común:

El relleno es válido y no se puede quitar. Descripción: Se produjo una excepción no controlada durante la ejecución de la solicitud web actual. Revise el seguimiento de la pila para obtener más información sobre el error y dónde se originó en el código.

Exception Details: System.Security.Cryptography.CryptographicException: Padding is invalid and cannot be removed.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[CryptographicException: Padding is invalid and cannot be removed.]
System.Security.Cryptography.RijndaelManagedTransform.DecryptData(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount, Byte[]& outputBuffer, Int32 outputOffset, PaddingMode paddingMode, Boolean fLast) +1545747
System.Security.Cryptography.RijndaelManagedTransform.TransformFinalBlock(Byte[] inputBuffer, Int32 inputOffset, Int32 inputCount) +257
System.Security.Cryptography.CryptoStream.FlushFinalBlock() +30 System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, Boolean useValidationSymAlgo) +164
System.Web.UI.Page.DecryptString(String s) +83
System.Web.Handlers.AssemblyResourceLoader.System.Web.IHttpHandler.ProcessRequest(HttpContext context) +148
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +358 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +64

Esto ocurre a petición de una solicitud WebResource.axd específica.

El otro error que estamos viendo es la 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. Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: 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.

Este error ocurre de vez en cuando mientras se enviaba una forma.

Ahora antes de saltar y dime la respuesta obvia (habitual) a este error, considere esto:

  • La aplicación está implementada en Windows Server 2003 en IIS 6
  • no es en una web granja. Solo un servidor web está en uso aquí.
  • La identidad del grupo de aplicaciones es una cuenta de servicio personalizada, y ejecuté aspnet_regiss -ga <username> en el servidor. Sin efecto.
+1

Agregó una respuesta clara para esto, compruébalo :) – eglasius

+0

¿Algún tipo de solución pero Ben? Tengo 15 informes de Exceptioneer en 25 minutos sobre el primer error que informó. Se suponía que * Rackspace * debía reiniciarse anoche después de instalar fx3.5 sp1 y pensé que eran de eso. Sin embargo, descubrí que "olvidaron" reiniciarlo según nuestro ticket. Aquí hay un enlace a uno de nuestros informes sobre el error: http://exceptioneer.com/Share/Summary.aspx?e5dca865-cb2c-4292-af3f-e9d645a081a7. –

+1

Nunca resolví este problema. Simplemente nunca estuvo en la parte superior de nuestra lista de prioridades. Ahora estoy en un proyecto diferente, así que ... no hay mucha ayuda que yo sepa. –

Respuesta

24

El error se debe a que su dominio de aplicación fue reciclado/reiniciado. Cuando eso sucede, la aplicación y la clave del equipo se configuran en automático, cambia. Eso afecta el descifrado de la información en la url de los recursos urls (.axd). Configurar una clave de máquina fija evitará que vuelva a suceder.

Selecciona esta para obtener más información sobre un caso similar (la explicación es un tema con la validación de estado de vista, pero la causa es la misma): http://www.developmentnow.com/blog/InvalidViewstate+Or+Unable+To+Validate+Data+Error.aspx

Yo también había estado preguntando sobre esto durante bastante tiempo . Después de ver esta pregunta, volví a meterme en ella: Is this an attempt to break my ASP.Net site's security? ... que acabo de responder con casi lo mismo.Tenía la sensación de que estaba a punto de reiniciar algo, porque cuando publicamos algo que reciclaba la aplicación, el error aparecía en el registro, pero no tenía otra fuente que indicara su relación (hoy encontré ese caso en invalidviewstate debido a el cambio de tecla de máquina :))

Ps. arriba finalmente lo explica en un solo servidor :)

+0

Investigaré un poco, pero no creo que este sea el problema. Si un servidor tiene una clave de máquina especificada en machine.config, entonces nunca debería cambiar. Gracias por los consejos, lo investigaré. –

+0

tiene la razón, si especifica la clave del equipo, no cambiará (esa es la solución, pero casi todas las fuentes solo lo aplican/explican al servidor múltiple), simplemente pensó que estaba utilizando el auto para la clave, ya que hizo énfasis en "Se NO está en una granja de servidores web. Solo hay un servidor web en uso aquí ". ... – eglasius

+0

mirando hacia atrás en este problema, este fue probablemente el escenario –

1

Este problema aparece cuando se genera una publicación antes de que la página se cargue por completo en el navegador. Eche un vistazo a la pregunta this.

+0

eso es lo que estaba pensando para el problema secundario, sin embargo, sucede con más frecuencia de lo que es cómodo. Esto no explica el primer error, que es mucho más grave en nuestro caso. –

+0

¿está utilizando HTTP o HTTPS? –

+0

Todo HTTP. [] –

0

Ben,

Para su primer problema, he encontrado esto que parece ser un poco más hasta el punto de lo que está viendo en que el problema se produce de forma esporádica. Debería poder encontrar una explicación completa de esto en http://www.codeproject.com/KB/security/Cryptor.aspx#aes.

Lo que realmente tiene que hacer es establecer RijndaelAlg.Padding en PaddingMode.ISO10126, PaddingMode.PKCS7 o PaddingMode.ANSIX923. Cualquiera de estos 3 valores debería funcionar, siempre que use el mismo valor al cifrar y descifrar. Otros valores funcionarán con algunos datos, pero no con todos los datos. La URL anterior explica por qué.

Lo que no entiendo es la razón por la que Microsoft proporciona opciones que a veces no funcionan, o al menos por qué no se convierten en una opción confiable.

+0

No estoy haciendo ninguna compresión o encripción por mi cuenta, por lo que esto es confuso. Esto solo sucede en las solicitudes a varias URL de WebResource.axd. –

+0

¿Utiliza componentes de terceros que sí lo son? – JohnL

Cuestiones relacionadas