是否可以使用.NET Remoting + TLS 1.2(或1.1)?

5
最近我们的PCI DSS扫描失败,并要求我们禁用TLS 1.0(并启用TLS 1.1或1.2)。我在我们的Windows Server 2008 R2服务器上找到了如何执行此操作的说明,但我们有一个使用.NET Remoting的旧应用程序(它是一个.NET 2.0 Windows窗体应用程序/IIS托管的CSLA 1.5数据门户),它无法与新设置通信。
我收到以下异常:

enter image description here

我已经尝试了各种TLS设置的组合,包括在客户端和服务器上禁用TLS 1.0并启用TLS 1.2,以及在客户端和服务器上启用TLS 1.1,但都没有成功。我做了一些研究发现.NET 4.5框架支持TLS 1.1和1.2, 但不清楚是否适用于.NET远程调用。是吗?此外,我发现微软建议升级到4.5.2版本
话虽如此,这个应用程序有许多依赖项和与.NET 4.5.2不兼容的地方,因此了解是否确实朝着升级的正确方向前进或者我是否应该匆忙重写整个应用程序(我探索过的所有选项都需要进行重大的应用程序更改)将会很有帮助。即使构建一个测试应用程序来尝试它也可能具有挑战性,因为我已经大约10年没有直接处理.NET远程处理了。
所以,我的问题是 - .NET远程处理是否支持TLS 1.1或1.2?
另外:
  1. 升级到.NET Framework 4.5.2就足够了吗?
  2. 是否需要放置更多配置设置以使其通信,如果是,则是什么?
  3. 如果升级到.NET Framework 4.5.2是唯一需要的,整个应用程序需要升级吗?只需使用.NET远程处理的部分?只需引用使用.NET远程处理的库的客户端?还是其他组合?
我正在使用:
  1. 作为服务器的Windows Server 2008 R2。
  2. 使用启用了SSL的IIS 7.5托管远程访问(CSLA数据门户)。
  3. 用于客户端的Windows 7专业版。

我尝试升级到.NET Framework 4.5.2,但没有帮助。 - Doug Domeny
3个回答

2

我在这篇晦涩的MSDN博客文章中找到了解决方案。为了使用TLS 1.2,您必须启用使用FIPS兼容加密算法的组策略设置。

这解决了.NET Remoting、单击部署和MS Web Deploy的问题。不幸的是,它破坏了我的ASP.NET Web应用程序,我仍在寻找解决方案


这篇文章“IS 7.5:如何启用TLS 1.1和TLS 1.2”(http://www.basics.net/2015/10/06/iis-7-5-how-to-enable-tls-1-1-and-tls-1-2/)可能会有所帮助。可能需要通过更改注册表来启用TLS。 我的Windows 7系统已将其禁用。 - Doug Domeny

2
以下链接为我提供了正确的解决方案。我在我的门户网站上使用.NET远程调用。我的IT部门禁用了我的CSLA服务器上的TLS 1.0,而我的CSLA库是使用.NET 4.0编写的。修复问题需要编辑客户机器上的注册表。

https://success.outsystems.com/Support/Enterprise_Customers/Maintenance_and_Operations/(.NET)_Enable_SSL_Protocols_for_your_Integrations_-_TLS_1.1_and_TLS_1.2

从文章中:

来自文章: 要启用TLS协议,您需要为Schannel添加新的注册表项[1]

为此,请按照以下步骤进行操作:

通过单击“开始”和“运行”来启动注册表编辑器。在“运行”字段(不带引号)中键入“regedit”。在注册表树的顶部突出显示计算机。首先通过单击“文件”,然后单击“导出”来备份注册表。选择一个文件位置以保存注册表文件。

注意:您将编辑注册表。如果操作不正确,这可能会对计算机产生有害影响,因此强烈建议进行备份。

浏览到以下注册表键:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols。 右键单击“协议”文件夹,选择“新建”,然后从下拉菜单中选择“键”。这将创建一个新的文件夹。将此文件夹重命名为TLS 1.1或TLS 1.2(取决于您要启用的协议)。 右键单击TLS 1.1或TLS 1.2密钥,在其下方添加一个新密钥。将新密钥重命名为:客户端。 右键单击客户端密钥,从下拉列表中选择“新建”,然后选择“DWORD(32位)值”。将DWORD重命名为DisabledByDefault。 右键单击名称DisabledByDefault并从下拉菜单中选择“修改...”。 确保Value数据字段设置为0,基数为十六进制。 点击确定。 像步骤7中所做的那样为客户端密钥创建另一个DWORD。 将第二个DWORD重命名为Enabled。 右键单击Enabled并从下拉菜单中选择“修改...”。确保Value数据字段设置为1,基数为十六进制。 点击确定。 重新启动服务器。重新启动后,服务器将能够通过您启用的SSL协议进行通信。但是,现在您需要将其添加到您的应用程序请求中。
在Windows注册表中启用SchUseStrongCrypto属性,以使用默认协议:TLS 1.0、TLS 1.1和TLS 1.2。如果您想确保启用了强加密,并且您的请求的SSL协议为TLS 1.0、TLS 1.1和TLS 1.2,请按照以下步骤操作:
通过单击“开始”和“运行”来启动注册表编辑器。在运行字段中键入“regedit”(不带引号)。
在注册表树的顶部突出显示计算机。首先通过单击“文件”,然后单击“导出”来备份注册表。选择文件位置以保存注册表文件。
注意:您将编辑注册表。如果操作不正确,这可能会对计算机产生不利影响,因此强烈建议备份。
请按以下步骤进行操作: 1. 浏览到以下注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NetFramework\v4.0.30319 2. 在右侧窗格上单击鼠标右键,创建一个新的DWORD(32位)值,并命名为 SchUseStrongCrypto。 3. 确保将值数据字段设置为1,并且基数为十六进制。单击“确定”。 4. 重复步骤2和3以配置注册表项 HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft.NetFramework\v4.0.30319。 5. 重新启动服务器。

1
这是我在进行对托管在IIS Windows 2012 R2中的代码库进行http调用时,在我的.Net 2.0/.Net 3.5代码中收到的错误:The underlying connection was closed: An unexpected error occurred on a send.
我对此问题有一个更新的答案。我还使用了托管在Windows 2012 R2(IIS)中的CSLA(和其他向Web服务器发出的http调用),最近已关闭SSL 3.0和TLS 1.0。有一个很方便的工具叫做IISCrypto,可以帮助设置您的TLS首选项。我选择了“最佳实践”,并取消了TLS 1.0的标记。
现在要修复.NET 2.0/3.5代码,需要按照这里的说明进行操作。它需要将SecurityProtocolTypeExtensions.cs和SslProtocolsExtensions.cs添加到您的项目中,并在向服务器端代码发出任何调用之前添加下面的代码。
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolTypeExtensions.Tls11 | SecurityProtocolTypeExtensions.Tls12;
我希望这样做可以帮助解决错误或问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接