Если вы включите параметр политики безопасности «Использовать FIPS-совместимые алгоритмы для шифрования, хеширования и подписи» в Windows, попытка использовать многие из криптографических классов в .NET Framework приведет к InvalidOperationException. По умолчанию ASP.NET использует AES для шифрования большого двоичного объекта ViewState, поэтому он не работает. Вы можете обойти это, добавив такой ключ в web.config:
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
И это охватывает вас для базового использования ASP.NET. Моя проблема заключается в следующем: у меня есть большие и сложные веб-приложения ASP.NET, которые интенсивно используют ScriptManager (основа ASP.NET AJAX) и должны быть развернуты государственным заказчиком, который должен включить этот параметр политики FIPS. Любая страница ASP.NET с ScriptManager выдает это исключение:
[InvalidOperationException: This implementation is not part of the Windows Platform FIPS validated cryptographic algorithms.]
System.Security.Cryptography.SHA1Managed..ctor() +3607454
System.Security.Policy.Hash.get_SHA1() +45
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfoInternal(Assembly assembly) +85
System.Web.Handlers.ScriptResourceHandler.GetAssemblyInfo(Assembly assembly) +99
System.Web.Handlers.RuntimeScriptResourceHandler.GetScriptResourceUrlImpl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +525
System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(List`1 assemblyResourceLists, Boolean zip, Boolean notifyScriptLoaded) +910
System.Web.Handlers.RuntimeScriptResourceHandler.System.Web.Handlers.IScriptResourceHandler.GetScriptResourceUrl(Assembly assembly, String resourceName, CultureInfo culture, Boolean zip, Boolean notifyScriptLoaded) +193
System.Web.UI.ScriptReference.GetUrlFromName(ScriptManager scriptManager, IControl scriptManagerControl, Boolean zip) +306
System.Web.UI.ScriptManager.RegisterUniqueScripts(List`1 uniqueScripts) +169
System.Web.UI.ScriptManager.RegisterScripts() +407
System.Web.UI.ScriptManager.OnPagePreRenderComplete(Object sender, EventArgs e) +200
System.Web.UI.Page.OnPreRenderComplete(EventArgs e) +11041982
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3672
Даже добавление элемента <enforceFIPSPolicy enabled="false"/>
в web.config не устраняет исключение.
Есть ли способ настроить ASP.NET так, чтобы ScriptManager можно было использовать с политикой безопасности Windows FIPS?