【问题标题】:Winform Http client Throws The underlying connection was closed: after disabling TLS 1.0 and TLS 1.1Winform Http 客户端抛出底层连接已关闭:禁用 TLS 1.0 和 TLS 1.1 后
【发布时间】:2021-01-09 03:32:34
【问题描述】:

我们有一个针对以下框架的 MVC 应用程序和一个 Windows 窗体应用程序

MVC 应用程序

Winform

最近我们在所有服务器和客户端机器上禁用了 TLS 1.1 和 TLS 1.0。

在此更改之后,两个应用程序都停止工作,并且我们注意到 MVC 应用程序在升级后在 web.config 中指定了错误的运行时。因此,我们对 MVC 应用程序进行了以下更改以使其正常工作。

目标框架从 4.5 到

现在 MVC 应用程序按预期工作,但 windows 窗体客户端没有

它抛出以下异常。

“底层连接已关闭:接收时发生意外错误。”

根据以下 POST,我们无需执行任何操作,因为 Windows 应用程序已在 4.6.2 上运行。

或者我们是否必须像其中一个答案中提到的那样对协议进行硬编码?

The client and server cannot communicate, because they do not possess a common algorithm - ASP.NET C# IIS TLS - System.ComponentModel.Win32Exception

如果有人可以让我们知道需要在 Windows 应用程序中进行哪些更改以使其与 TLS 1.2 一起使用,我们不胜感激。或者虽然它说 4.6.2 它可以针对不同的运行时。喜欢 MVC 应用程序?

更新:

当我们通过 Visual Studio 运行 WinForms 应用程序并显示 ServicePointManager.SecurityProtocol 时,它显示为 System.Default。

但是当它被部署时,ServicePointManager.SecurityProtocol 显示为它使用 ssl3

【问题讨论】:

  • 您是否在 Windows7、Windows Server 2008 RC 上运行此程序?无论如何,为了利用框架提供的自动协议选择功能(操作系统选择),我建议将 .NET Framework 4.7+ 定位到任何地方。如果您使用提到的系统之一,则必须明确设置 TLS12,除非您调整注册表。 Windows 8 和 Windows 10 默认使用 TLS 1.2
  • 它在 Windows 2016 上运行,这是一个大的应用程序升级到 4.7 可能会变得棘手,有没有快速解决这个问题。
  • 如果你在运行时阅读ServicePointManager.SecurityProtocol,你会得到什么?你试过设置ServicePointManager.SecurityProtocol = SecurityProtocolType.SystemDefault吗? IIRC,4.6 启用所有协议,而 4.7+ 使用SystemDefault。您是否尝试过明确设置 TLS12?获取IIS Crypto 并验证您的机器设置。另见SSL Server Test(如果可以从外部到达)
  • 我还会检查(因为它是一个大型应用程序),是否有人在某处硬编码了SecurityProtocol 版本。

标签: c# .net asp.net-mvc winforms tls1.2


【解决方案1】:

解决了问题

问题是我们在 Windows 应用程序的 .config 文件中有以下设置。 value="Switch.System.Net.DontEnableSchUseStrongCrypto=true" 将其设置为 false 后无需更改,我们要求一切都像魔术一样工作。

为什么它在 VS 中有效但在生产中无效?因为,该设置是由生产构建管道注入到 app.config 中的。

感谢所有评论所有这些 cmets 的人的帮助!

【讨论】:

    猜你喜欢
    • 2021-03-13
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2021-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-20
    相关资源
    最近更新 更多