我有
- 包含 .NET Core 3.1 控制台应用程序的应用程序
- 和一个.NET Standard 2.0 库。
- 控制台应用程序调用使用 System.Net.Http.HttpClient 调用
https://...
API 的库。 - 整个应用程序在 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)
- 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
- 如何在站点服务器和远程站点系统上启用 TLS 1.2https://docs.microsoft.com/en-us/mem/configmgr/core/plan-design/security/enable-tls-1-2-server
- 检查注册表设置(参见上面的第一个链接,由于我的声誉太低,我只能发布 8 个链接)
.NET 核心 3.1
在 .NET Core 3.1 上,HttpClient 使用 System.Net.Http.SocketsHttpHandler HttpClient
SocketsHttpHandler
SocketsHttpHandler 有一个属性 SslOptions https://docs.microsoft.com/en-us/dotnet/api/system.net.http.socketshttphandler.ssloptions?view=net-6.0#system-net-http-socketshttphandler-ssloptions
SslOptions 有一个属性 EnabledSslProtocols https://docs.microsoft.com/en-us/dotnet/api/system.net.security.sslclientauthenticationoptions.enabledsslprotocols?view=net-6.0#system-net-security-sslclientauthenticationoptions-enabledsslprotocols
EnabledSslProtocols 的默认值为 none
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.