【问题标题】:Is it possible to use .NET Remoting + TLS 1.2 (or 1.1)?是否可以使用 .NET Remoting + TLS 1.2(或 1.1)?
【发布时间】:2015-10-29 19:25:50
【问题描述】:

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

我收到以下异常:

我尝试了客户端和服务器中 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 框架 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 Professional。

【问题讨论】:

  • 我尝试升级到 .NET Framework 4.5.2 但没有帮助。

标签: asp.net .net iis-7.5 .net-remoting csla


【解决方案1】:

我在this obscure MSDN blog post 中发现了解决方案。要使用 TLS 1.2,您必须启用组策略设置以使用 FIPS 投诉加密算法。

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

【讨论】:

【解决方案2】:

这是我在对 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 代码,有指令here。它需要将 SecurityProtocolTypeExtensions.cs 和 SslProtocolsExtensions.cs 添加到您的项目中,并在调用服务器端代码之前添加以下代码。

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

我希望这将有人解决错误/问题。

【讨论】:

    【解决方案3】:

    以下链接为我提供了正确的解决方案。我正在为我的门户使用 .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 右键单击 Protocols 文件夹,然后从下拉菜单中选择 New,然后选择 Key。这将创建新文件夹。将此文件夹重命名为 TLS 1.1 或 TLS 1.2(取决于您要启用的协议)
    • 右键单击 TLS 1.1 或 TLS 1.2 密钥并在其下方添加一个新密钥。将新密钥重命名为:Client
    • 右键单击客户端键并从下拉列表中选择新建,然后选择 DWORD(32 位)值。将 DWORD 重命名为 DisabledByDefault。
    • 右键单击名称 DisabledByDefault 并从下拉菜单中选择修改...。 确保值数据字段设置为 0,并且基数为十六进制。
    • 点击确定。
    • 为客户端密钥创建另一个 DWORD,就像您在第 7 步中所做的那样。
    • 将第二个 DWORD 重命名为 Enabled。
    • 右键单击名称已启用并从下拉菜单中选择修改...。确保值数据字段设置为 1,并且基数为十六进制。
    • 单击确定。 重新启动服务器 重新启动后,服务器将能够通过您启用的 SSL 协议进行通信。但是,您现在需要将其添加到您的应用程序请求中。

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

    通过单击开始并运行来启动注册表编辑器。在“运行”字段中输入“regedit”(不带引号)。

    在注册表树的顶部突出显示计算机。首先通过单击文件然后单击导出来备份注册表。选择一个文件位置来保存注册表文件。

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

    • 浏览到以下注册表项: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
    • 重启服务器

    【讨论】:

      猜你喜欢
      • 2016-04-27
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-06
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      相关资源
      最近更新 更多