在 Windows Server 2016 上使用 HttpClient 的 .NET Core 3.1 + .NET Standard 2.0 应用程序使用哪个版本的 TLS?

在 Windows Server 2016 上使用 HttpClient 的 .NET Core 3.1 + .NET Standard 2.0 应用程序使用哪个版本的 TLS?

我有

  1. 包含 .NET Core 3.1 控制台应用程序的应用程序
  2. 和一个.NET Standard 2.0 库。
  3. 控制台应用程序调用使用 System.Net.Http.HttpClient 调用https://...API 的库。
  4. 整个应用程序在 Windows Server 2016 Datacenter(版本 1607 Build 14393.4704)上运行

当使用 HttpClient 时我这样做

HttpClient client = new HttpClient();
client.DefaultRequestHeaders.Add("WWW-Authenticate", $"BASIC ...");
var response = await client.PostAsync(apiUrl, contentString);

默认使用哪个版本的 TLS?

如果有人能给我一个微软文档的链接就太好了。

答案1

不是100%确定,但是...

经过一番谷歌搜索,我找到了这份 Microsoft 文档。似乎如果保留 HttpClient 上的默认 SSL 设置,则 HttpClient 将使用默认的 OS TLS 设置。而在 Windows Server 2016 上,这似乎是 TLS 1.2

Windows Server 2016 Datacenter(版本 1607 内部版本 14393.4704)

  1. Windows Server 2016 上默认启用 TLS:https://docs.microsoft.com/en-us/dotnet/framework/network-programming/tls#support-for-tls-12 https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-client#bkmk_winhttp

在 Windows Server 2016 上启用 TLS 1.2

  1. 如何在站点服务器和远程站点系统上启用 TLS 1.2https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-server
  2. 检查注册表设置(参见上面的第一个链接,由于我的声誉太低,我只能发布 8 个链接)

.NET 核心 3.1

  1. 在 .NET Core 3.1 上,HttpClient 使用 System.Net.Http.SocketsHttpHandler HttpClient

    1. 文档https://docs.microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=net-6.0#remarks
  2. SocketsHttpHandler

    1. 文档https://docs.microsoft.com/en-us/dotnet/api/system.net.http.socketshttphandler?view=net-6.0
  3. SocketsHttpHandler 有一个属性 SslOptions https://docs.microsoft.com/en-us/dotnet/api/system.net.http.socketshttphandler.ssloptions?view=net-6.0#system-net-http-socketshttphandler-ssloptions

  4. SslOptions 有一个属性 EnabledSslProtocols https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslclientauthenticationoptions.enabledsslprotocols?view=net-6.0#system-net-security-sslclientauthenticationoptions-enabledsslprotocols

  5. EnabledSslProtocols 的默认值为 none

  6. EnabledSslProtocols 的默认值 none 表示: Allows the operating system to choose the best protocol to use, and to block protocols that are not secure. Unless your app has a specific reason not to, you should use this field.

    1. https://docs.microsoft.com/en-us/dotnet/api/system.security.authentication.sslprotocols?view=net-6.0

相关内容