运行 IIS 8.5 上启用 FIPS 的 .NET Core 应用程序导致 500 错误

Running a .NET Core app on IIS 8.5 with FIPS enabled cause 500 error

我有一个使用 windows 身份验证的网络核心 Web 应用程序,我在 IIS 8.5 下的 windows 服务器 2012 R2 机器上 运行。当试图到达它时,我得到:

InvalidOperationException:此实现不是 Windows 平台 FIPS 验证加密算法的一部分。 System.Security.Cryptography.SHA256Managed..ctor()

给定 app.UseBrowserLink(); & app.UseDeveloperExceptionPage();在 Startup.cs 中使用,否则我只会收到显示空白屏幕的 500 内部服务器错误。

如果我禁用 FIPS(控制面板 -> 管理工具 -> 本地安全策略 -> 本地策略 -> 安全选项 -> "System Cryptography: Use FIPS compliant algorithms for encryption, hashing, and signing")我可以访问该站点并且 windows 身份验证是正常工作。

所以我的问题是为什么在 IIS 8.5 上托管网络核心应用程序时使用 FIPS 会导致此错误?目前我没有使用 FIPS 的要求,但将来可能会改变。

Repro 应用是 ASP.NET 5 RC1 应用,它使用 dnx 和 dnu。 Dnu 恢复使用来自 NuGet2 的代码,它使用 SHA256Managed class 在 FIPS 下触发 IOE。

ASP.NET Core RC2 使用 nuget V3,它不应该有这个问题,所以当你将你的应用程序移植到 RC2 时,从 FIPS 的角度来看你应该是好的。