Windows 中的 TLS 1.2 通信是否需要 FIPS 合规性?

Is FIPS compliance REQUIRED for TLS 1.2 communication in Windows?

好的,这个问题已经存在一段时间了。我已经 now and so far the only way I can get my applications to communicate with Windows Server 2008 R2 is to enable the "Use FIPS Compliant algorithms for encrypting, hashing, and signing" setting in the Group Policy 了客户端和服务器机器。一旦打开(在客户端和服务器的注册表中启用 TLS 1.2 并禁用 TLS 1.0),它就会工作。

但是,我的困境是我 不需要 FIPS 合规性,并且基于 Microsoft's recommendation 以及我必须升级和更改很多的事实代码以使我的所有应用程序都符合 FIPS 标准(更不用说正在使用的所有第 3 方应用程序是否符合客户端的不确定性),我希望有更好的解决方案。

郑重声明,我尝试进行通信的应用程序是 MS Web Deploy 3.6、基于 HTTPS/IIS 的 .NET Remoting 和 ClickOnce 部署。

我突然意识到,当我在服务器上启用 TLS 1.2 而不 启用 FIPS 模式时,浏览器可以与之通信。所以,显然有一些方法可以在没有这个设置的情况下完成工作,我只是没有找到它。

我查看了 and ,但这似乎是一个无法在配置文件中设置的低级设置,所以它在我的 3 个案例中至少有 2 个不起作用(它可能与 .NET 远程处理一起工作,我还没有尝试过)。但是缺少示例令人震惊 - 也许这就是答案,但我不知道如何使用它。

一个可接受的解决方案是只为某些用户启用 FIPS 合规性,这样我就可以分别配置每个应用程序,但由于我能找到的都是机器范围的设置,所以我不知所措。

我想出的另一个可能的解决方案是使用 VPN 连接到服务器,这样我的应用程序就不需要加密协议来进行通信。但是,由于我使用的是 Windows Server 2008 R2 Web Edition(不支持 VPN),所以我坚持使用第三方解决方案(希望支持 TLS 1.2)或在新 OS.

我的问题很具体:如何使已编译的 .NET 应用程序(例如 MS Web Deploy 3.6)通过 TLS 1.2 进行通信而不 启用 FIPS 合规性,就像浏览器一样?

我的回答基于文章中的信息:Transport Layer Security (TLS) best practices with the .NET Framework 并且似乎依赖于安装 .NET 4.7 或更高版本,而最初提出此问题时并不存在。

我的测试是在 2016 年的服务器上完成的,其中 .NET 4.7 同时充当客户端和服务器,并与自身进行通信。客户端 EXE 的目标是 .NET 4.7 之前的版本。在这种情况下,如果注册表中不存在以下值,则它们似乎默认为 0。

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v2.0.50727]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319]
"SystemDefaultTlsVersions"=dword:00000001
"SchUseStrongCrypto"=dword:00000001

添加这些值后,我不再需要为 TLS 1.2 启用 FIPS。