简体   繁体   English

Windows中的TLS 1.2通信是否需要符合FIPS要求?

[英]Is FIPS compliance REQUIRED for TLS 1.2 communication in Windows?

Ok, this has been an ongoing issue for some time. 好的,这一直是一个持续存在的问题。 I have been experimenting for a couple of months 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 of both the client and server machines. 我已经进行了几个月的实验,到目前为止,我可以使我的应用程序与Windows Server 2008 R2进行通信的唯一方法是启用组策略中“使用FIPS兼容算法进行加密,哈希和签名”设置客户端和服务器计算机。 Once that is turned on (TLS 1.2 enabled and TLS 1.0 disabled in the registry of both client and server) it works. 一旦启用(在客户端和服务器的注册表中启用TLS 1.2,并禁用TLS 1.0),它便可以工作。

But, my dilemma is that I don't need FIPS compliance, and based on Microsoft's recommendation and the fact that I have to upgrade and change a lot of code in order to make all of my apps FIPS compliance (not to mention the uncertainty of whether all 3rd party apps in use will comply on the clients), I am hoping for a better solution. 但是,我的困境是我不需要 FIPS合规性,并且基于Microsoft的建议以及我必须升级和更改大量代码才能使我的所有应用程序都符合FIPS的事实(更不用说不确定性了)是否所有正在使用的第三方应用程序都将符合客户端要求),我希望有一个更好的解决方案。

For the record, the applications I am trying to get to communicate are MS Web Deploy 3.6, .NET Remoting over HTTPS/IIS, and ClickOnce deployment. 作为记录,我尝试交流的应用程序是MS Web Deploy 3.6,通过HTTPS / IIS的.NET Remoting和ClickOnce部署。

It dawned on me that when I enable TLS 1.2 on the server without enabling FIPS mode that the browsers can communicate with it . 我突然意识到,当我在服务器上启用TLS 1.2 而未启用FIPS模式时, 浏览器便可以与之通信 So, obviously there is some way to get the job done without this setting, I just haven't found it. 因此,很明显,没有这种设置,有些方法可以完成工作,但我只是没有找到它。

I looked at this answer and this answer , but this seems like a low-level setting that can't be set in the configuration file, so it won't work in at least 2 of my 3 cases (it might work with .NET remoting, I haven't tried yet). 我看了这个答案这个答案 ,但这似乎是无法在配置文件中设置的低级设置,因此在我的3种情况中,至少有2种无法使用(它可能与.NET兼容)远程处理,我还没有尝试过)。 But the lack of examples is appalling - maybe this is the answer, but I can't figure out how to use it. 但是缺少示例令人震惊-也许这就是答案,但我不知道如何使用它。

An acceptable solution would be to enable FIPS compliance only for certain users, so I can configure each app separately, but since all I can find are machine-wide settings I am at a loss. 可以接受的解决方案是仅对某些用户启用FIPS遵从性,因此我可以分别配置每个应用程序,但是由于我只能找到机器范围的设置,所以我很茫然。

One other potential solution I came up with is to use a VPN to connect to the server so my apps don't need an encrypted protocol to communicate. 我想出的另一个潜在解决方案是使用VPN连接到服务器,因此我的应用程序不需要加密协议即可通信。 However, since I am using Windows Server 2008 R2 Web Edition (which doesn't support VPN) I am stuck with using a 3rd party solution (which hopefully would support TLS 1.2) or rebuilding my server on a new OS. 但是,由于我使用的是Windows Server 2008 R2 Web Edition(不支持VPN),因此我坚持使用第三方解决方案(希望它将支持TLS 1.2)或在新的OS上重建服务器。

My question is specifically: How can I make compiled .NET applications such as MS Web Deploy 3.6 communicate over TLS 1.2 without enabling FIPS compliance, just like the browsers do ? 我的问题特别是:如何像MS Web Deploy 3.6这样的已编译.NET应用程序通过TLS 1.2 进行通信, 而又 不像浏览器那样启用FIPS遵从性?

My answer is based on information from the article: Transport Layer Security (TLS) best practices with the .NET Framework and appears rely on having .NET 4.7 or greater installed which didn't exist when this question was originally asked. 我的回答基于来自以下文章的信息: .NET Framework的传输层安全性(TLS)最佳实践,并且似乎依赖于安装.NET 4.7或更高版本,而最初提出此问题时并不存在。

My testing was done on a 2016 server with .NET 4.7 acting as both the client and the server, communicating with itself. 我的测试是在2016年服务器上完成的,.NET 4.7既充当客户端又充当服务器,并且与自身通信。 The client EXE was targeting a pre-4.7 version of .NET. 客户端EXE的目标是4.7之前的.NET版本。 In this case it seems like the following values default to 0 if they're not present in the registry. 在这种情况下,如果注册表中不存在以下值,则默认为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

After adding these values I no longer needed to have FIPS enabled for TLS 1.2 to work. 添加这些值后,我不再需要启用FIPS才能使TLS 1.2正常工作。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM