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

Если Вы включаете "Использованию FIPS совместимые алгоритмы для шифрования, хеширования, и подписание" опции политики безопасности в Windows, пытаясь использовать многие криптографические классы в Платформе.NET приведет к InvalidOperationException. По умолчанию ASP.NET использует AES для шифрования блоба ViewState, таким образом, это перестало работать. Можно работать вокруг этого путем добавления ключа как это к web.config:

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>

И это покрывает Вас для основного использования ASP.NET. Моя проблема - это: у Меня есть большой, сложный ASP.NET веб-приложения, который делает интенсивное использование ScriptManagers (основа Ajax ASP.NET) и должен быть развернут правительственным клиентом, который должен включить эту установку политики 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?

5
задан Tim Danner 19 February 2010 в 06:04
поделиться

2 ответа

Просмотрите команду find .

Вы ищете что-то вроде

find . -name "*.xls" -type f -exec program 

Post edit

find . -name "*.xls" -type f -exec xls2csv '{}' '{}'.csv;

выполнит xls2csv file.xls file.xls.csv

Ближе к желаемому.

-121--876171-

В общем случае, избегайте наличия переменных элемента доступа mixins: Это очень плотная форма соединения, которая может сделать будущий рефакторинг излишне сложным.

Одной из полезных стратегий является постоянный доступ Mixin к переменным через средства доступа. Итак, вместо:

#!/usr/bin/ruby1.8

module Mixin

  def do_something
    p @text
  end

end

class Foo

  include Mixin

  def initialize
    @text = 'foo'
  end

end

Foo.new.do_something     # => "foo"

миксин обращается к "текстовому" методу доступа, который определяется включенным классом:

module Mixin

  def do_something
    p text
  end

end

class Foo

  attr_accessor :text

  include Mixin

  def initialize
    @text = 'foo'
  end

end

Foo.new.do_something     # => "foo"

Что если нужно включить миксин в этот класс?

class Foo

def initialize
  @text = "Text that has nothing to do with the mixin"
end

end

Использование общих и общих имен данных в миксинах может привести к конфликтам, когда включенный класс использует одно и то же имя. В этом случае, пусть mixin ищет данные с менее общим именем:

module Mixin

  def do_something
    p mixin_text
  end

end

и пусть класс inclusing определяет соответствующий метод доступа:

class Foo

  include Mixin

  def initialize
    @text = 'text that has nothing to do with the mixin'
    @something = 'text for the mixin'
  end

  def mixin_text
    @something
  end

end

Foo.new.do_something     # => "text for the mixin"

Таким образом, метод доступа действует как своего рода "средство согласования импеданса" или "транслятор" между данными mix-in и данными класса inclusing.

-121--2457406-

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

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

Статический метод GetAssemblyInfo класса System.Web.Handlers. Это значение было изменено между .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.Расширения версии 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. Мы открыли дело о поддержке в корпорации Майкрософт.

3
ответ дан 15 December 2019 в 00:59
поделиться

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

1
ответ дан 15 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: