如何在请求级别设置TLS版本?

How to set TLS version at request level?

提问人:Saket Kumar 提问时间:11/9/2023 更新时间:11/9/2023 访问量:23

问:

我们在 .Net Framework 4.7 中有一个应用程序,它托管多个 API 端点。应用程序部署在多个服务器(其中一些服务器是旧的)中,并且不会从这些服务器强制执行 TLS 1.2+。这导致某些服务器将 TLS 设置为 1.1,而其他服务器将其设置为 1.2+。

到目前为止,一切正常,因为这些端点正在调用其他不需要 TLS 1.2 的 API。现在,其中一个下游 API 需要 TLS 1.2+,而其余 API 可能仍在使用 1.1。那么,想要检查我们是否可以只为其中一个 API 调用设置 TLS 1.2,而不是在应用程序级别设置它?

我们尝试了这段代码

var originalSecurityProtocol = ServicePointManager.SecurityProtocol;
try
{
    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
    // Make API call
}
finally
{
    ServicePointManager.SecurityProtocol = originalSecurityProtocol;
}

但发现并发调用可能存在问题。我们可以尝试其他解决方案吗?

C# httpclient httpwebrequest tls1.2

评论

0赞 Dai 11/9/2023
TLS 是连接级别,而不是请求级别(单个 TLS 连接将用于为同一主机的多个请求提供服务)。您的问题应该重新命名为“如何为每个主机设置 TLS 版本?”,而不是每个请求。
0赞 Dai 11/9/2023
你可以通过使用每个主机来解决这个问题,方法是用相应的set构造其内部 - 这当然不起作用,但只要你使用适当配置的实例,你应该没问题。(不过,不要忘记 .NET 4.x 上涉及的各种生存期问题,请考虑使用 - 但如果您想要每个主机的设置,则需要绕过)。HttpClientHttpClientHandlerHttpClientHandler.SslProtocolsHttpWebRequestWebClientHttpClientHttpClientIHttpClientFactoryConfigurePrimaryHttpMessageHandler
0赞 Charlieface 11/9/2023
“TLS 1.2+ 不是从他们那里强制执行的”,然后整理服务器。默认情况下,关闭 TLS1.2 存在安全风险。请参阅 support.microsoft.com/en-au/topic/...不要乱来,只是整理操作系统。ServicePointManager

答: 暂无答案