set*_*thu 8 .net c# ssl wcf tls1.2
我们有一些 ASP.NET 和 WCF 应用程序,它们在发布时不断迁移到最新的 .net 框架版本。在我们到达 .NET Framework 4.6.2 之前,此迁移工作正常,从那时起我们开始看到 TLS 连接错误,如下所示。当我在 Web.config 文件中添加
<httpRuntime targetFramework="4.6.2" />under<system.web>时,错误消失了。据我了解,此设置强制应用程序在 .NET Framework 4.6.2 下运行(没有这个,我相信应用程序在 .NET Framework 4.0 下运行),这导致它使用底层操作系统的默认协议来保护连接。如果我遗漏了什么,请纠正我的理解。
System.AggregateException:发生一个或多个错误。---> System.Net.Http.HttpRequestException: 发送请求时出错。---> System.Net.WebException: 基础连接已关闭:发送时发生意外错误。---> System.IO.IOException: 无法从传输连接读取数据:远程主机强行关闭了现有连接。---> System.Net.Sockets.SocketException: System.Net.Sockets.NetworkStream.EndRead(IAsyncResult asyncResult) 的 System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) 的远程主机强行关闭了现有连接--- 内部异常堆栈跟踪结束 --- 在 System.Net.TlsStream.EndWrite(IAsyncResult asyncResult) 在 System.Net.ConnectStream。
看看这个:https : //blogs.perficient.com/2016/04/28/tsl-1-2-and-net-support。TLS 1.2 是 .NET 4.6 及更高版本的默认值,支持但不是 4.5 的默认值,4.0 及更低版本不受支持。
也许您的应用程序更新之一、IIS 或操作系统配置更改已禁用 TLS 版本 < 1.2,并且客户端应用程序无法连接。
至于设置<httpRuntime targetFramework="4.6.2" />,我们发现了同样的事情。更改项目文件中的目标框架和元素中的targetFramework值compilation是不够的。它仍然保留 <.NET 4.6 的 TLS 行为。事实上,在更改目标框架时,Visual Studio 将httpRuntime元素添加到 web.config 中的注释块中。
(此处推荐的答案也很有帮助:ASP .NET MVC 中的 web.config 中的 TargetFramework 设置意味着什么?)