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

时间:2015-11-28 21:32:51

标签: .net clickonce webdeploy fips tls1.2

好的,这已经有一段时间了。我现在已经experimenting for a couple of months,到目前为止,我可以让应用程序与Windows Server 2008 R2进行通信的唯一方法是启用客户端和服务器计算机的"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(更不用说使用的所有第三方应用程序是否符合客户端的不确定性),我希望有更好的解决方案。

为了记录,我尝试进行通信的应用程序是MS Web Deploy 3.6,通过HTTPS / IIS进行.NET Remoting,以及ClickOnce部署。

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

我查看了this answerthis answer,但这似乎是一个无法在配置文件中设置的低级设置,因此它无法在我的3个案例中至少有2个(它可能适用于.NET远程处理,我还没有尝试过)。但缺乏示例令人震惊 - 也许这就是答案,但我无法弄清楚如何使用它。

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

我提出的另一个可能的解决方案是使用VPN连接到服务器,以便我的应用程序不需要加密协议进行通信。但是,由于我使用的是Windows Server 2008 R2网络版(它不支持VPN),我很难使用第三方解决方案(希望能支持TLS 1.2)或在新操作系统上重建我的服务器。

我的问题具体是:如何使编译的.NET应用程序(如MS Web Deploy 3.6)通过TLS 1.2 进行通信,而无需启用FIPS合规性, 就像浏览器一样< / EM>

1 个答案:

答案 0 :(得分:1)

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

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

添加这些值后,我不再需要启用FIPS才能使TLS 1.2正常工作。