Если Вы включаете "Использованию 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?
Просмотрите команду 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. Мы открыли дело о поддержке в корпорации Майкрософт.
Компания Microsoft выпустила исправление для решения этой проблемы: KB981119. Я не думаю, что исправление общедоступно на веб-сайте Microsoft.