Не може да се потвърди грешка в данните с машинен ключ, зададен на SHA1

Имам просто .net приложение, използващо .NET 2.0 runtime в IIS 7.5, където съм променил машинния ключ в web.config, за да използвам следното:

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

Това работи добре локално, но когато публикувам на сървъра, получавам „HttpException (0x80004005): Не мога да потвърдя данни“ винаги, когато разглеждам сайта. Уверих се, че съм задал debug=false за компилация. Задаването на метода за валидиране на 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


person Ben    schedule 16.10.2013    source източник


Отговори (2)


Изпълнявате ли приложението в истински .NET 2.0 набор от приложения? (Питам, защото използвате IIS 7.5).

Ако не, имайте предвид, че има промяна в алгоритмите за криптиране в .NET 4.5 framework.

Ако трябва да сте съвместими с ‹ .NET 4.5 Framework, ще ви трябва етикет за съвместимост:

<machineKey compatibilityMode="Framework20SP1" />  

Вижте http://msdn.microsoft.com/en-us/library/system.web.configuration.machinekeysection.compatibilitymode.aspx или http://blogs.msdn.com/b/webdev/archive/2012/10/23/cryptographic-improvements-in-asp-net-4-5-pt-2.aspx за подробности.

person Stefan    schedule 16.10.2013
comment
Да, наборът от приложения за моя сайт е настроен да използва .NET 2.0 - person Ben; 16.10.2013
comment
Все още можете да опитате етикета за съвместимост, ако не работи, страхувам се, че тук съм празен. Съжалявам за това... :| - person Stefan; 16.10.2013
comment
Добре, опитах се да поставя маркера compatibilityMode в раздела machinekey, както беше предложено, но все още получавам същата грешка :( - person Ben; 16.10.2013
comment
Благодаря за бакшиша. Това реши проблема за мен - person Alaeddin Hussein; 01.08.2014

Открих, че когато локалната политика за сигурност за „Системна критография: използвайте fips съвместими алгоритми за криптиране, хеширане и подписване“ (Настройки за сигурност >> локални политики >> securityOptions) е зададена на true, Sha1 няма да функционира, което е причината защо получавам грешката в този случай.

person Ben    schedule 16.10.2013
comment
къде мога да видя тази опция? - Настройки за сигурност ›› локални правила ›› securityOptions - person kudlatiger; 30.12.2015
comment
Знам, че това е старо, но реших да сложа бележка... тази настройка се намира в редактора на групови правила (gpedit.msc) под Правила за локален компютър › Конфигурация на компютър › Настройки на Windows › Настройки за защита › Местни правила › Опции за защита . Трябва да нулирате iis, след като го промените. Благодаря! - person Nick DeMayo; 09.02.2016