【发布时间】:2021-06-29 23:43:37
【问题描述】:
以下代码在我的开发工作站(Windows 10 Pro)上运行良好,在 Visual Studio 中运行。正如您可能从命名约定中猜到的那样,我正在使用 WebClient 发布到远程 https:// 端点。
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
resp = m_WebClient.UploadValues(m_WebClient.BaseAddress, "POST", postParams);
但是,当我将它部署到我的生产服务器(Windows Server 2012 R2 Datacenter - 它是一个 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, String method, 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 更新。)谢谢!
自发帖以来,我积累了两个额外的事实:
- 切换到 HttpWebRequest 没有任何积极影响。
- 将可执行文件移至另一台 Windows 10 Pro 机器确实有积极作用,连接已成功建立。
因此,导致此问题的关键因素组合是 Windows Server 2012 R2 和我的 C# 代码(WebClient 或 HttpWebRequest)的组合。回想一下,Postman 能够从 Windows Server 建立通信,因此这本身不是问题。一定是一些深奥的握手问题,但我的想法已经不多了。感谢您提供的任何建议!
【问题讨论】:
-
我相信这与密码套件不匹配有关。抱歉,我无法给出确切的答案。我启动了一个 Windows 2019 Server 来托管这项服务,每月 66 美元,问题就解决了。回顾一下,可以从 Windows 10 和 Windows 2019 Server 建立连接,但 2012 Server R2 上的 SChannel 配置似乎无法连接。如果供应商回复我的询问,我会在此处发布他们的回复。
标签: webclient tls1.2 windows-server-2012-r2