我知道 when 我们应该使用 C# 和 .NET 通过 ServicePointManager.SecurityProtocol 属性显式设置支持的 TLS 版本。
但我不知道的是为什么我们应该这样做?
根据 MSDN:此属性选择安全套接字的版本 用于新的层 (SSL) 或传输层安全 (TLS) 协议 使用安全超文本传输协议 (HTTPS) 的连接 仅方案;现有连接不会改变。
据我所知,客户端和服务器之间的SSL/TLS版本协议是通过TLS握手达成一致的。
问题: 有人可以向我解释一下显式版本选择的相关性吗? 或者 当此类协商应该在 TLS 握手阶段进行时,为什么我们要提及支持的 TLS 版本?
由 Steffen Ullrich 回答(SE)
这不是用于选择特定的协议版本,而是用于设置允许的协议版本列表。通常,出于兼容性原因,您希望使用 TLS 1.2 及更高版本,也许需要 TLS 1.1 和 TLS 1.0,但您不希望允许 SSLv3 或更低版本。通过使用此 API,您可以调整以下 TLS 握手中允许的协议。
您将选择的显式版本选择 如果您想强制实施特定级别的保护 如果您不介意特定版本 您可以使用隐式机制的默认设置 只需保留它而不进行特定设置,然后 在握手过程中,服务器和客户端都应就版本达成一致,并从上到下(目前最先进的版本是 TLS 1.3)开始协商。
在当今的托管环境中,它也是由操作系统和 .Net 控制的 框架所以例如.Net 4.8和Win11操作系统默认为1.3v https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls