我继承了一个充当企业 Jmeter 板的Web应用程序。它是一个ASP.NET应用程序。. NET版本= 4.7.2它在两台运行IIS 10的Windows 2016 Standard服务器上运行。
该应用的功能之一是向特定的https://URL发出HTTP请求,获取数据,解析JSON,并缓存对象列表。这已经运行了很多个月。(注意:我们所称的"远程"服务器仍然是"内部"的,我团队中的另一个人基本上"拥有"它。)
嗯,在感恩节周末,看起来Prod应用程序池在循环,并且该查询立即开始出错,错误消息为"System.Net.WebException:请求已中止:无法创建SSL/TLS安全通道。"
我和其他几个人被呼了。当时,我们没有注意到(在事件查看器中)应用程序池已循环。经过几个小时的调查(以及重启应用服务器),"拥有"我们正在查询的服务器的家伙很快为同一资源设置了一个新的端点...将其设置为允许HTTP连接/不需要使用HTTPS。这样做的目的是在我们稍后调查该问题之前,将其作为一种变通方法。
现在是"以后"了。
我们正在调用的远程服务器似乎需要使用TLS 1.3。我在自己的笔记本电脑上使用Firefox和Chrome调出了几个https,以确认这一点:该服务器上的URL。
所以,啊哈,我想,今天下午早些时候我发现了一些信息,表明Windows Server 2016标准版不支持使用TLS 1.3!(https://learn. microsoft. com/en-us/windows/win32/secauthn/protocols-in-tls-ssl--schannel-ssp-#tls-protocol-version-support)
但我想起来了早些时候,我已经能够调出这些https:当我登录到我的应用程序的网络服务器时,Chrome中的URL!果然,我去那里用Firefox和Chrome重新测试。两者都说他们建立的连接使用的是TLS版本1.3!!
那么,是什么让Windows Server 2016 Standard看起来确实支持TLS 1. 3呢?
而且,从我所读到的一切来看,由于我的应用程序使用的是. NET版本4.7.2,它应该默认使用操作系统的默认协议。那么,它不也应该使用TLS 1.3吗?为什么它不能建立连接?
我确实需要一些下一步该怎么做的指示。
谢谢!
1条答案
按热度按时间ebdffaop1#
背景
你上面问题中的许多陈述都是正确的,但是你需要把内容放到上下文中去,这样才能得到全貌。
首先,Chrome/Firefox支持TLS 1.3,但这种支持来自于它们自带的加密库(有许多选项,Mozilla NSS、OpenSSL等),而不是来自Windows本地加密API。
第二,正如你所发现的,Windows Server 2016本身不支持TLS 1.3,因为它的底层加密API缺乏TLS 1.3支持。TLS 1.3支持目前只包含在Windows Server 2022中(它是否会被移植回以前的Windows版本是未知的)。
第三,当您尝试分析Windows组件(如. NET Framework)或产品时,您需要确定它们依赖于什么来执行TLS、Windows本机加密API或它们自己的依赖项(如Chrome/Firefox)。
回答您的特定ASP.NET问题
遗憾的是,众所周知,. NET Framework中的BCL类依赖于Windows本机加密API,因此在Windows Server 2016上,您最多只能使用TLS 1.2。
如果您的应用程序非常需要TLS 1.3,您需要升级到Windows Server 2022,或切换到第三方加密API。
参考