ASP.NET中的会话状态FIPS验证错误

时间:2015-11-13 11:36:26

标签: asp.net .net encryption fips tls1.2

我正在尝试在我们的Windows 2008 R2服务器上启用TLS 1.2以实现PCI合规性,并且已设法按照this obscure blog post开始工作,这需要启用FIPS验证。最后,经过几周的寻找解决方案,click-once,.NET远程处理和MS Web Deploy正在通过TLS 1.2进行通信。

但是,当我启用FIPS验证并且出现以下错误时,我的机器上还有Web应用程序停止运行:

  

此实现不是Windows平台FIPS验证的加密算法的一部分。

     

描述:在执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪,以获取有关错误及其在代码中的起源位置的更多信息。

     

异常详细信息: System.InvalidOperationException:此实现不是Windows平台FIPS验证的加密算法的一部分。

     

来源错误:

     

在执行当前Web请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息。

     

堆栈追踪:

     

[InvalidOperationException:此实现不是Windows平台FIPS验证的加密算法的一部分。]      System.Security.Cryptography.RijndaelManaged..ctor()+ 10489630      System.Web.Configuration.MachineKeySection.ConfigureEncryptionObject()+439      System.Web.Configuration.MachineKeySection.EnsureConfig()+152      System.Web.Configuration.MachineKeySection.HashData(Byte [] buf,Byte []修饰符,Int32 start,Int32 length)+48      System.Web.Configuration.MachineKeySection.HashAndBase64EncodeString(String s)+136      System.Web.SessionState.OutOfProcSessionStateStore.OneTimeInit()+ 763      System.Web.SessionState.OutOfProcSessionStateStore.Initialize(String name,NameValueCollection config)+223      System.Web.SessionState.OutOfProcSessionStateStore.Initialize(String name,NameValueCollection config,IPartitionResolver partitionResolver)+43      System.Web.SessionState.SessionStateModule.InitModuleFromConfig(HttpApplication app,SessionStateSection config)+11279756      System.Web.SessionState.SessionStateModule.Init(HttpApplication app)+155      System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext,HttpContext context,MethodInfo [] handlers)+480      System.Web.HttpApplication.InitSpecial(HttpApplicationState状态,MethodInfo []处理程序,IntPtr appContext,HttpContext上下文)+336      System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext,HttpContext context)+350      System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext)+382

     

[HttpException(0x80004005):此实现不是Windows平台FIPS验证的加密算法的一部分。]      System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+11421094      System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+88      System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr,HttpContext context)+4405316

     

版本信息:Microsoft .NET Framework版本:2.0.50727.5485; ASP.NET版本:2.0.50727.5491

我正在使用所有3个应用程序的ASP.NET状态服务,他们正在获得此堆栈跟踪。

我一直在寻找解决方案,他们基本上都说要将算法转换为符合FIPS标准的算法。

但是,由于ASP.NET本身正在抛出这个解决方案是什么?我使用.NET 3.5,会升级到更新的框架解决问题吗?或者是否有更简单的修复,例如配置设置?

  

注意:我还尝试使用进程内会话状态绕过此错误,然后我得到了与cookie加密相同的错误(显然也使用System.Security.Cryptography.RijndaelManaged)。我尝试将机器密钥设置为示例here中的一个(用于测试),并将其与AES结合作为解密和验证设置,但它对错误消息没有任何影响

1 个答案:

答案 0 :(得分:0)

以下更改适用于我的情况......

  1. 在Windows注册表中启用TLS协议。请参阅IIS 7.5: How to enable TLS 1.1 and TLS 1.2
  2. 在应用程序代码中,在应用程序启动时添加以下代码行(例如Application_StartSystem.Web.Http.Application

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