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

Is it possible to use .NET Remoting + TLS 1.2 (or 1.1)?

最近我们的 PCI DSS 扫描失败,要求我们禁用 TLS 1.0(并启用 TLS 1.1 或 1.2)。我在我们的 Windows Server 2008 R2 盒子上找到了如何操作的说明,但我们有一个使用 .NET Remoting 的遗留应用程序(它是 .NET 2.0 windows 形式 app/IIS托管 CSLA 1.5 数据门户),它不与新设置通信。

我收到以下异常:

我已尝试在客户端和服务器中对 TLS 设置组合进行各种配置,但均无济于事。如:

  1. 在客户端和服务器(在注册表中)禁用 TLS 1.0 并启用 TLS 1.2。
  2. 在客户端和服务器上启用 TLS 1.1(在注册表中)。

我做了一些研究并发现 .NET 4.5 framework supports TLS 1.1 and 1.2,但不清楚这是否扩展到 .NET 远程处理。是吗?

此外,我发现 Microsoft's recommendation is to upgrade to 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. IIS 7.5 在启用 SSL 的情况下托管远程处理(CSLA 数据门户)。
  3. Windows 7 专业客户。

我在 this obscure MSDN blog post 中找到了解决方案。为了使用 TLS 1.2,您必须启用组策略设置以使用符合 FIPS 标准的加密算法。

这解决了 .NET 远程处理、单击一次部署和 MS Web 部署的问题。不幸的是,它破坏了我的 ASP.NET 网络应用程序,我 still looking for a solution 解决了这个问题。

这是错误 The underlying connection was closed: An unexpected error occurred on a send. 当对 IIS Windows 2012 R2 中托管的代码库进行 http 调用时,我在我的 .Net 2.0/.Net 3.5 代码中收到错误。

我有这个问题的最新答案。我还使用 Windows 2012 R2 (IIS) 中托管的 CSLA(以及对 Web 服务器的其他 http 调用),并且最近关闭了 SSL 3.0 和 TLS 1.0。有一个名为 IISCrypto 的便捷工具可帮助您设置 TLS 首选项。我选择了 "Best Practice" 并且未标记 TLS 1.0。

现在修复 .NET 2.0/3.5 代码,有说明 here。它需要在您的项目中添加 SecurityProtocolTypeExtensions.cs 和 SslProtocolsExtensions.cs 并在调用服务器端代码之前添加下面的代码。

System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls | SecurityProtocolTypeExtensions.Tls11 | SecurityProtocolTypeExtensions.Tls12;

我希望有人能解决 error/problems。

以下link为我提供了正确的解决方案。我正在为我的门户使用 .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"(不带引号)。突出显示注册表树顶部的计算机。首先单击文件备份注册表,然后单击导出。 Select 保存注册表文件的文件位置。

注意:您将编辑注册表。如果操作不当,可能会对您的计算机造成不利影响,因此强烈建议进行备份。

  • 浏览到以下注册表项:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols 右键单击 Protocols 文件夹,然后从下拉菜单中单击 select New 和 Key。这将创建新文件夹。将此文件夹重命名为 TLS 1.1 或 TLS 1.2(取决于您要启用的协议)
  • 右键单击 TLS 1.1 或 TLS 1.2 密钥并在其下方添加一个新密钥。将新密钥重命名为:Client
  • 右键单击客户端键,然后从下拉列表中单击 select 新建,然后单击 DWORD(32 位)值。将 DWORD 重命名为 DisabledByDefault。
  • 右键单击名称 DisabledByDefault 并从下拉菜单中 select 修改...。 确保值数据字段设置为 0 且基数为十六进制。
  • 点击确定。
  • 像在第 7 步中那样为客户端密钥创建另一个 DWORD。
  • 将第二个 DWORD 重命名为已启用。
  • 右键单击名称 Enabled,然后从下拉菜单中 select Modify...。确保值数据字段设置为 1 且基数为十六进制。
  • 点击确定。 重新启动服务器 重新启动后,服务器将能够通过您启用的 SSL 协议进行通信。但是,您现在需要将其添加到您的应用程序请求中。

在 Windows 注册表中启用 SchUseStrongCrypto 属性 以用作默认协议:TLS 1.0、TLS 1.1 和 TLS 1.2 如果您想确保已启用强密码术并且您请求的 SSL 协议为 TLS 1.0、TLS 1.1 和 TLS 1.2,请按照以下步骤操作:

单击开始和 运行 启动注册表编辑器。在 运行 字段中输入 "regedit"(不带引号)。

突出显示注册表树顶部的计算机。首先单击文件备份注册表,然后单击导出。 Select 保存注册表文件的文件位置。

注意:您将编辑注册表。如果操作不当,可能会对您的计算机造成不利影响,因此强烈建议进行备份。

  • 浏览到以下注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft.NetFramework\v4.0.30319
  • 右键单击右窗格并创建一个名为 SchUseStrongCrypto 的新 DWORD(32 位)值。 确保值数据字段设置为 1 且基数为十六进制。单击“确定”。
  • 对注册表项重复步骤 4 和 5:HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft.NetFramework\v4.0.30319
  • 重启服务器