【发布时间】:2015-11-13 11:36:25
【问题描述】:
我正在尝试在我们的 Windows 2008 R2 服务器上启用 TLS 1.2 以实现 PCI 合规性,并通过遵循 this obscure blog post 设法使其工作,这需要打开 FIPS 验证。最后,在寻找解决方案数周后,单击一次、.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(字符串名称,NameValueCollection 配置)+223 System.Web.SessionState.OutOfProcSessionStateStore.Initialize(字符串名称,NameValueCollection 配置,IPartitionResolver partitionResolver)+43 System.Web.SessionState.SessionStateModule.InitModuleFromConfig(HttpApplication 应用程序,SessionStateSection 配置)+11279756 System.Web.SessionState.SessionStateModule.Init(HttpApplication 应用程序)+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 上下文)+11421094 System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +88 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +4405316
版本信息:Microsoft .NET Framework 版本:2.0.50727.5485; ASP.NET 版本:2.0.50727.5491
我将 ASP.NET 状态服务与所有 3 个应用程序一起使用,它们正在获取此堆栈跟踪。
我已经四处寻找解决方案,他们基本上都说将算法切换到符合 FIPS 的算法。
- Problem with FIPS Validated Cryptographic Algorithms
- ASPX pages fail due to FIPS 140 security policy
但是既然这是由 ASP.NET 本身抛出的,那么解决方案是什么?我正在使用 .NET 3.5,升级到更新的框架会解决问题吗?还是有更简单的解决方法,比如配置设置?
注意:我还尝试使用绕过此错误的进程内会话状态,然后在使用 cookie 加密时遇到相同的错误(显然也使用
System.Security.Cryptography.RijndaelManaged)。我尝试将机器密钥设置为示例 here 中的那个(用于测试),并将其与 AES 结合作为解密和验证设置,但它对错误消息没有任何影响。
【问题讨论】:
-
这篇文章“IS 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 系统已禁用它。
标签: asp.net .net encryption fips tls1.2