我正在尝试在我们的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结合作为解密和验证设置,但它对错误消息没有任何影响
答案 0 :(得分:0)
以下更改适用于我的情况......
在应用程序代码中,在应用程序启动时添加以下代码行(例如Application_Start
为System.Web.Http.Application
)
System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;