7

我有一个使用 IIS 7.5 中的 .NET 2.0 运行时的简单 .net 应用程序,其中我已将 web.config 中的机器密钥更改为使用以下内容:

  <machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"/>

这在本地工作正常,但是当我发布到服务器时,每当浏览网站时都会收到“HttpException(0x80004005):无法验证数据”。我确保设置编译调试 =“假”。将验证方法设置为 3DES 可消除此问题,但我们需要使用 SHA1。我在这里缺少一些配置选项吗?请参阅下面的堆栈跟踪。

[HttpException (0x80004005): Unable to validate data.]
   System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo, Boolean signData) +1008
   System.Web.Configuration.MachineKeySection.EncryptOrDecryptData(Boolean fEncrypt, Byte[] buf, Byte[] modifier, Int32 start, Int32 length, IVType ivType, Boolean useValidationSymAlgo) +91
   System.Web.UI.Page.EncryptStringWithIV(String s, IVType ivType) +83
   System.Web.UI.Page.EncryptString(String s) +30
   System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1497
   System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +1148
   System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +152
   System.Web.Handlers.ScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +37
   System.Web.UI.ScriptManager.GetScriptResourceUrl(String resourceName, Assembly assembly) +105
   System.Web.UI.ScriptRegistrationManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +113
   System.Web.UI.ScriptManager.System.Web.UI.IScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +14
   System.Web.UI.ClientScriptManager.RegisterClientScriptResource(Control control, Type type, String resourceName) +53
   System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e, Boolean registerScript) +113
   System.Web.UI.WebControls.Menu.OnPreRender(EventArgs e) +25
   System.Web.UI.Control.PreRenderRecursiveInternal() +80
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Control.PreRenderRecursiveInternal() +171
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

4

2 回答 2

5

您是否在真正的 .NET 2.0 应用程序池中运行应用程序?(我问是因为您使用的是 IIS 7.5)。

如果没有,请记住 .NET 4.5 框架中的加密算法发生了变化。

如果您需要与 < .NET 4.5 Framework 兼容,则需要一个兼容性标签:

<machineKey compatibilityMode="Framework20SP1" />  

请参阅http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspxhttp://blogs.msdn.com/b/webdev/archive/2012/10/23 /cryptographic-improvements-in-asp-net-4-5-pt-2.aspx了解详细信息。

于 2013-10-16T15:29:44.817 回答
3

我发现当“系统加密:使用符合fips的算法进行加密、散列和签名”(安全设置>>本地策略>>安全选项)的本地安全策略设置为true时,Sha1将不起作用,这就是原因为什么在这种情况下我会收到错误。

于 2013-10-16T17:42:40.870 回答