是否可以使用 .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 设置组合进行各种配置,但均无济于事。如:
- 在客户端和服务器(在注册表中)禁用 TLS 1.0 并启用 TLS 1.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?
另外:
- 升级到 .NET Framework 4.5.2 是否足以实现它?
- 是否需要进行更多的配置设置才能进行通信?如果有,它们是什么?
- 如果只需要升级到 .NET Framework 4.5.2,是否需要升级整个应用程序,只需要升级使用 .NET 远程处理的部分,只需升级引用使用 .NET 远程处理的库的客户端,或其他一些组合?
我正在使用:
- Windows Server 2008 R2 作为服务器。
- IIS 7.5 在启用 SSL 的情况下托管远程处理(CSLA 数据门户)。
- 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 编写的。修复涉及编辑客户端计算机上的注册表。
来自文章:
要启用 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
- 重启服务器
最近我们的 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 设置组合进行各种配置,但均无济于事。如:
- 在客户端和服务器(在注册表中)禁用 TLS 1.0 并启用 TLS 1.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?
另外:
- 升级到 .NET Framework 4.5.2 是否足以实现它?
- 是否需要进行更多的配置设置才能进行通信?如果有,它们是什么?
- 如果只需要升级到 .NET Framework 4.5.2,是否需要升级整个应用程序,只需要升级使用 .NET 远程处理的部分,只需升级引用使用 .NET 远程处理的库的客户端,或其他一些组合?
我正在使用:
- Windows Server 2008 R2 作为服务器。
- IIS 7.5 在启用 SSL 的情况下托管远程处理(CSLA 数据门户)。
- 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 编写的。修复涉及编辑客户端计算机上的注册表。
来自文章: 要启用 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
- 重启服务器