【问题标题】:Session State FIPS Validation Error in ASP.NETASP.NET 中的会话状态 FIPS 验证错误
【发布时间】: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 的算法。

但是既然这是由 ASP.NET 本身抛出的,那么解决方案是什么?我正在使用 .NET 3.5,升级到更新的框架会解决问题吗?还是有更简单的解决方法,比如配置设置?

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2010-11-02
    • 1970-01-01
    • 2012-03-02
    • 2011-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多