Можно ли заставить ASP.NET ScriptManager работать с политикой безопасности Windows FIPS?

Если вы включите параметр политики безопасности «Использовать 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?


person Tim Danner    schedule 19.02.2010    source источник


Ответы (2)


Обновление от Microsoft: исправление доступно по адресу http://code.msdn.microsoft.com/KB981119

Ответ заключается в том, что вы не можете использовать ScriptManager с сервером с поддержкой FIPS. :(

Статический метод GetAssemblyInfo класса System.Web.Handlers.ScriptResourceHandler создает хэш-объект, несовместимый с FIPS. Это было изменено между .Net 3.5 SP1 и .Net 3.51.

(System.Web.Extensions версии 3.5.30729.196)
XP / 2003/2008 .Net 3.5 SP1

private static Pair<AssemblyName, DateTime> GetAssemblyInfoInternal(Assembly assembly)
{
    return new Pair<AssemblyName, DateTime>(new AssemblyName(assembly.FullName), GetLastWriteTime(assembly));
}

(System.Web.Extensions версии 3.5.30729.4926)
Win7 / 2008R2 .Net 3.51

private static Pair<AssemblyName, string> GetAssemblyInfoInternal(Assembly assembly)
{
    AssemblyName first = new AssemblyName(assembly.FullName);
    return new Pair<AssemblyName, string>(first, Convert.ToBase64String(new Hash(assembly).SHA1));
}

Очевидно, что изменение метки даты и времени на хэш нарушило соответствие FIPS. Мы открыли обращение в службу поддержки Microsoft.

person John Taylor    schedule 19.02.2010

Корпорация Майкрософт выпустила исправление для решения этой проблемы: KB981119. Я не думаю, что исправление общедоступно на веб-сайте Microsoft.

person chrisj    schedule 15.03.2010