C# 控制台应用程序 HttpClient 抛出 "System.Net.Http.WinHttpException: A security error occurred"

C# Console Application HttpClient throws "System.Net.Http.WinHttpException: A security error occurred"

我在 Windows Server 2012 R2 中有一个带有 .Net framework 4.6 运行 的 C# 控制台应用程序。我正在使用 "IIS Crypto 3.1" 更改安全协议中的一些设置,但在使用 "IIS Crypto" 中称为 "Best Practices" 的功能(自动设置客户端和服务器协议)后,我无法获得我的应用程序再次通过 HttpClient 调用任何 URL(它以前可以工作)。这是我的代码:

 using (HttpClient hc = new HttpClient())
  {
      ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 
      | SecurityProtocolType.Tls;

       ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, 
       errors) => { return true; };
       var response = await hc.GetAsync(download_path);
       content = response.Content;
   }

这是我在点击 "hc.GetAsync()" 后得到的异常:

System.AggregateException: One or more errors occurred. ---> System.AggregateExc
eption: One or more errors occurred. ---> System.Net.Http.HttpRequestException:
An error occurred while sending the request. ---> System.Net.Http.WinHttpExcepti
on: A security error occurred

这是我的安全协议的当前设置:

不幸的是,我不知道如何恢复我在此处更改的设置(此应用更改了一些注册表项)。

更新:

所以问题似乎只出现在为 Telegram Bot API 调用特定 URL 时(就像 https://api.telegram.org/....)。对于其他 URLs(据我所知),这个全新的设置仍然有效。我必须说之前的设置可以完美地与这个相同的 URL.

经过7个小时的不断奋斗,终于找到了问题所在。显然 "IIS Crypto" 在 windows 服务器 2012 R2 中更改了 "Cipher Suites" 的顺序。我只是 enabling/disabling 协议本身,而不是它们的密码顺序。将密码套件的顺序更改为默认顺序后(请注意,此顺序是 OS 特定的。因此它在 Windows Server 2008、2012、2016 中有所不同,...我找到了默认值在 "IIS Crypto" 网页中。) 似乎 Telegram 服务器对密码套件的顺序很敏感,并且在更改时不响应(我不知道这里的确切技术)。所以这就是它在 Windows Server 2012 R2 中的样子:

此外,我在笔记本电脑 运行ning windows 10 中检查了 IIS Crypto,在使用完全相同的功能(即 "best practices")后,我没有 运行 任何问题。所以这个问题似乎与 Windows Server 2012 R2

有某种关系