Я пытаюсь сделать приложение ASP.NET MVC 4 совместимым с FIPS. К счастью, .NET 4.5 ASP.NET уже использует утвержденную FIPS реализацию AES для шифрования viewstate и cookie, поэтому нет проблем с этим.Является ли выходным кэшем выходных данных для детей несовместимым с FIPS?
Однако я столкнулся с странной проблемой. Это можно воспроизвести с помощью очень минималистического приложения ASP.NET MVC.
Создания простого контроллера:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
[OutputCache(Duration = 5)]
public ActionResult Data()
{
return View();
}
}
Создать очень простые представления для индекса:
<h2>Page</h2>
@Html.Action("Data")
и данные действий:
<h2>Data</h2>
Поэтому в основном мы пытаемся сделать это использовать кэширование вывода для дочернего действия (работает как прелесть без включенного FIPS).
Теперь, если мы запустим его, мы получим наш страшный FIPS экран смерти:
[InvalidOperationException:. Эта реализация не является частью Windows Platform FIPS проверенного криптографических алгоритмов]
System.Security .Cryptography.SHA256Managed..ctor() +10840001[TargetInvocationException:. Исключение было брошено в мишени призывания] System.RuntimeMethodHandle.InvokeMethod (Объект мишени, Object [] аргументов, подпись сиг, булева конструктор) +0
System.Reflection.RuntimeConstructorInfo.Invoke (BindingFlags invokeAttr, Связующее Связующее, Object [], параметры CultureInfo культура) +339 System.Security.Cryptography.CryptoConfig.CreateFromName (имя String, Object [] арг) +656 System.Security.Cryptography.SHA256.Create() +14 System.Web.Mvc.OutputCacheAttribute.GetChildActionUniqueId (ActionExecutingContext filterContext) +315
System.Web.Mvc.OutputCacheAttribute.OnActionExecuting (ActionExecutingContext filterContext) +118
An d, как вы можете видеть здесь, само исключение происходит глубоко в недрах MVC в OutputCacheAttribute.GetChildActionUniqueId
- очевидно, он пытается использовать не одобренный FIPS шасси SHA256, и я не вижу способа инструктировать его использовать другой.
Так первая вещь, которая приходит на ум, чтобы попытаться решить ее будет включать в себя следующие в файле web.config при конфигурации элемента:
<runtime>
<enforceFIPSPolicy enabled="false"/>
</runtime>
Однако я понял, как много людей до меня, что это настройка не влияет на веб-приложения (независимо от того, размещена ли она в IIS или Cassini), хотя она отлично работает для консольных приложений на одном компьютере.
Общее решения ASP.NET 2.0 переключения на тройную DES, не имеет никакого эффекта либо
<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="3DES" decryption="3DES"/>
В конце концов в .NET 4.5 мы уже FIPS утвержденного AES, используемый для этих целей.
Отключение FIPS на всей машине (через инструмент реестра или групповой политики) работает отлично, но, конечно же, цель состоит в том, чтобы он работал с FIPS, включенным на уровне машины.
Возможно, мне что-то не хватает? Любой способ заставить его работать с удалением приложения из всех экземпляров выходных кэшированных действий с детьми?
Фантастический! Это сработало - Спасибо, я, возможно, даже где-то видел, что проблема SignalR где-то, но я отклонил его как не связанный –