Ошибка проверки состояния сеанса FIPS в ASP.NET

Я пытаюсь включить TLS 1.2 на нашем сервере Windows 2008 R2 для соответствия PCI, и мне удалось заставить его работать, следуя это непонятное сообщение в блоге, в котором требуется включить проверку FIPS. Наконец, после нескольких недель поиска решения, «щелчок один раз», удаленное взаимодействие .NET и MS Web Deploy обмениваются данными через TLS 1.2.

Однако у меня также есть веб-приложения на машине, которые перестают работать, когда я включил проверку FIPS со следующей ошибкой:

Эта реализация не является частью проверенных FIPS алгоритмов шифрования платформы Windows.

Описание. Необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.

Сведения об исключении: System.InvalidOperationException: эта реализация не является частью криптографических алгоритмов платформы Windows, проверенных FIPS.

Ошибка источника:

Необработанное исключение было создано во время выполнения текущего веб-запроса. Информацию о происхождении и местонахождении исключения можно определить с помощью трассировки стека исключений ниже.

Трассировка стека:

[InvalidOperationException: эта реализация не является частью проверенных FIPS криптографических алгоритмов платформы Windows.] System.Security.Cryptography.RijndaelManaged..ctor () +10489630 System.Web.Configuration.MachineKeySection.ConfigureEncryptionObject () +439 System.Web. .MachineKeySection.EnsureConfig () +152 System.Web.Configuration.MachineKeySection.HashData (Byte [] buf, модификатор Byte [], начало Int32, длина Int32) +48 System.Web.Configuration.MachineKeySection.HashAndBase64EncodeString (String 136 System.Web.SessionState.OutOfProcSessionStateStore.OneTimeInit () +763 System.Web.SessionState.OutOfProcSessionStateStore.Initialize (имя строки, конфигурация NameValueColition) +223 Имя System.Web.SessionValueColition, имя раздела System.Web.SessionColition.OutOfProcueSession ) +43 System.Web.SessionState.SessionStateModule.InitModuleFromConfig (приложение HttpApplication, SessionStateSection con fig) +11279756 System.Web.SessionState.SessionStateModule.Init (приложение HttpApplication) +155 System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS (IntPtr appContext, контекст HttpContext, обработчики MethodInfo []) +480 State.WebApplication.Http , Обработчики MethodInfo [], IntPtr appContext, HttpContext context) +336 System.Web.HttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext, HttpContext context) +350 System.Web.Hosting.PipelineRuntime.InitializeApprlication (IntializeApprlication)

[HttpException (0x80004005): эта реализация не является частью проверенных FIPS криптографических алгоритмов платформы Windows.] System.Web.HttpRuntime.FirstRequestInit (контекст HttpContext) +11421094 System.Web.HttpRuntime.EnsureFirstRequestInit (HttpContext) контекст System.Web .HttpRuntime.ProcessRequestNotificationPrivate (запись IIS7WorkerRequest, контекст HttpContext) +4405316

Информация о версии: Microsoft .NET Framework Версия: 2.0.50727.5485; Версия ASP.NET: 2.0.50727.5491

Я использую службу состояния ASP.NET со всеми тремя приложениями, и они получают эту трассировку стека.

Я искал решения, и все они в основном говорят, что нужно переключить алгоритм на тот, который совместим с FIPS.

Но поскольку это создается самим ASP.NET, каково решение? Я использую .NET 3.5, решит ли проблему обновление до новой версии? Или есть более простое исправление, например, настройка конфигурации?

ПРИМЕЧАНИЕ. Я также попытался использовать внутрипроцессное состояние сеанса, которое обходит эту ошибку, а затем я получаю ту же ошибку с шифрованием файлов cookie (которое, по-видимому, также использует System.Security.Cryptography.RijndaelManaged). Я попытался установить ключ компьютера на тот, который указан в примере здесь (для теста), а также объединил его с AES в качестве параметров дешифрования и проверки, но это не повлияло на сообщение об ошибке.


person NightOwl888    schedule 13.11.2015    source источник
comment
Эта статья - 7.5: Как включить TLS 1.1 и TLS 1.2 (basics.net/2015/10/06/iis-7-5-how-to-enable-tls-1-1-and-tls -1-2) может помочь. Возможно, потребуется включить TLS, изменив реестр. В моей системе Windows 7 она была отключена.   -  person Doug Domeny    schedule 15.04.2016


Ответы (1)


В моей ситуации сработали следующие изменения ...

  1. Включите протоколы TLS в реестре Windows. См. IIS 7.5: как включить TLS 1.1 и TLS 1.2
  2. В коде приложения добавьте следующую строку кода при запуске приложения (например, Application_Start для System.Web.Http.Application)

    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;

person Doug Domeny    schedule 19.04.2016