【发布时间】: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 上运行。
或者我们是否必须像其中一个答案中提到的那样对协议进行硬编码?
如果有人可以让我们知道需要在 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