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

时间:2015-10-29 19:25:51

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

最近我们的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设置组合配置无济于事。如:

  1. 在客户端和服务器上(在注册表中)禁用TLS 1.0并启用TLS 1.2。
  2. 在客户端和服务器上(在注册表中)启用TLS 1.1。
  3. 我做了一些研究并发现.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远程处理的库的客户端,或者其他一些组合?
    4. 我正在使用:

      1. Windows Server 2008 R2作为服务器。
      2. IIS 7.5使用SSL enababled(CSLA dataportal)来托管远程处理。
      3. Windows 7 Professional for the client。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

以下链接为我提供了正确的解决方案。我正在为门户使用.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密钥,然后在其下面添加一个新密钥。将新密钥重命名为:Client
  • 右键单击“客户端”密钥,然后从下拉列表中选择“新建”,然后选择“ DWORD(32位)值”。将DWORD重命名为DisabledByDefault。
  • 右键单击名称DisabledByDefault,然后从下拉菜单中选择“修改...”。 确保“值数据”字段设置为0,并且“基数”为十六进制。
  • 单击“确定”。
  • 像在步骤7中一样,为客户端密钥创建另一个DWORD。
  • 将第二个DWORD重命名为“已启用”。
  • 右键单击名称Enabled,然后从下拉菜单中选择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”(不带引号)。

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

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

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

答案 2 :(得分:0)

这是我在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首选项。我选择了#34;最佳实践"还有未标记的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;

我希望有人可以解决错误/问题。