相关疑难解决方法(0)

.NET 4.8:Net.ServicePointManager.SecurityProtocol=SystemDefault 的评估结果是什么?TLS 1.2 问题

我有一个 .NET 4.8 应用程序,它是一个小型 Excel 插件(因此在 Office/Excel 中运行),它执行 HTTP (REST) 请求并在 Excel 中显示数据。

在网络服务器上,我们重新配置为仅允许 TLS 1.2,突然 HTTP 请求不再与此 WebException 一起工作: The underlying connection was closed: An unexpected error occurred on a send.

测试客户端操作系统是 Windows 10 和 8(已完全修补)。因此,根据https://learn.microsoft.com/en-us/dotnet/framework/network-programming/tls支持 TLS 1.2 :“支持,并默认启用。”

在 PowerShell 中执行以下命令给出:

[Net.ServicePointManager]::SecurityProtocol
SystemDefault
Run Code Online (Sandbox Code Playgroud)

以下注册表项(在文档和博客中经常提到)未设置(它们不存在 - 也不是 WOW6432Node 变体):

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SystemDefaultTlsVersions
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings\WinHttp\DefaultSecureProtocols
Run Code Online (Sandbox Code Playgroud)

设置HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.30319\SchUseStrongCrypto=1“修复”该问题。

我还可以手动启用 TLS 1.2,问题就会消失,但这会将控制权从操作系统移回应用程序,这似乎不是 .NET 4.8 的基本思想: ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;

我的问题:

  • 我如何找出SystemDefault.NET 中的计算结果。我怎样才能找到这个?
  • 为什么在不设置注册表项的情况下 TLS 1.2 似乎无法启用?
  • 我的假设是 …

.net c# tls1.2

7
推荐指数
1
解决办法
1万
查看次数

6
推荐指数
1
解决办法
2万
查看次数

标签 统计

c# ×2

tls1.2 ×2

.net ×1

ssl ×1

tls1.3 ×1