获取“无法创建 SSL/TLS 安全通道”在 Windows Server 2012 R2 上

问题描述

以下代码在我的开发工作站(Windows 10 专业版)上运行得很好,在 Visual Studio 中运行。正如您可能从命名约定中猜到的那样,我使用 WebClient 发布到远程 https:// 端点。

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
resp = m_WebClient.UploadValues(m_WebClient.BaseAddress,"POST",postParams);

但是,当我将它部署到我的生产服务器(Windows Server 2012 R2 数据中心 - 它是一个 Azure VM)时,我遇到了以下异常:

The request was aborted: Could not create SSL/TLS secure channel.
at System.Net.WebClient.UploadValues(Uri address,String method,NameValueCollection data)
at System.Net.WebClient.UploadValues(String address,NameValueCollection data)
at rater8.ReviewShake.Request.Processor.TryGetRESTApi(Int32 CompanyId,String Scrapestring,String LastJobId,String& Response)

我知道我能够从我的生产服务器到远程服务器进行通信,因为我已经从生产服务器在 Postman 中执行了调用。我收到了 200 - 好的。我知道远程服务器坚持使用 TLS1.2,因为如果我在 Postman 中禁用该协议,调用就会失败。

这是几天前一直在运行的生产代码。我会联系供应商,但支持可能参差不齐。在此期间,有没有人有任何想法?为了在 Windows Server 2012 上启用此功能,我是否需要在操作系统级别进行配置? (我确实运行了 Windows 更新。)谢谢!

自从发帖以来,我又积累了两个事实:

  1. 改用 HttpWebRequest 没有任何积极影响。
  2. 将可执行文件移至另一台 Windows 10 Pro 计算机确实产生了积极影响,连接已成功建立。

因此,导致此中断的关键因素组合是 Windows Server 2012 R2 和我的 C# 代码(WebClient 或 HttpWebRequest)的组合。回想一下,Postman 能够从 Windows Server 建立通信,因此这本身就不是问题。一定是一些深奥的握手问题,但我的想法不多了。感谢您提供的任何建议!

解决方法

目前正在处理同样的事情。我们在 2012 R2 服务器上运行了一个 web api 调用,它可以工作,但突然之间,它在您发布帖子的时间停止工作。

我认为这是 Microsoft 的一个错误,但这里是我正在测试的当前解决方案。

  1. 尝试另一个服务器安装版本,我们注意到它在 2016 年服务器上运行
  2. 我注意到,当微软发布新的 VS 2019 更新时,这个问题通常会出现,也许尝试其他编辑器或降级您的 vs2019 ide?​​li>
  3. 也许可以尝试将您的 .NET 框架版本降级到更稳定的版本。

这些是我目前正在测试的东西,但最确定的方法是安装 2016 年或 2019 年的服务器。在短期内启动新服务器安装,直到问题得到解决,可能只是你的胡同。

编辑:
目前,迁移到更新的服务器似乎已经解决了这个问题。