Не удалось проверить ошибку данных, если для ключа компьютера установлено значение SHA1.

У меня есть простое приложение .net, использующее среду выполнения .NET 2.0 в 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 произошли изменения в алгоритмах шифрования.

Если вам нужна совместимость с ‹ .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
где я могу увидеть эту опцию? - Настройки безопасности ›› локальные политики ›› параметры безопасности - person kudlatiger; 30.12.2015
comment
Я знаю, что это устарело, но решил добавить примечание... этот параметр находится в редакторе групповой политики (gpedit.msc) в разделе «Политика локального компьютера» > «Конфигурация компьютера» > «Параметры Windows» > «Параметры безопасности» > «Локальные политики» > «Параметры безопасности». . Вы должны iisreset после его изменения. Спасибо! - person Nick DeMayo; 09.02.2016