【问题标题】:C# application unable to establish SSL/TLS connectionC# 应用程序无法建立 SSL/TLS 连接
【发布时间】:2017-03-23 14:52:35
【问题描述】:

我有一个 C# 应用程序在尝试将文件保存到远程 SharePoint 服务器时生成错误“请求被中止:无法创建 SSL/TLS 安全通道”。这发生在 Windows 2012 服务器上,但应用程序在我的桌面 Windows 机器上成功运行。

另外,我可以从开发服务器连接到带有 IE11 的 SharePoint 服务器,并且只启用了 TLS 1.1。

应用程序已启用所有安全协议。

我也知道应用程序从不调用 certificatevalidationcallback 函数。

鉴于这些症状,有人知道可能出了什么问题吗?

【问题讨论】:

  • 您可能想尝试使用 OpenSsl 连接到您的服务器并启用详细日志记录,看看是否可以从 Windows 2012 Server 成功通过。
  • 经过相当多的实验,我找到了解决方案,但我仍然感到困惑。解决方案原来是使用 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11;这并不奇怪。令人惊讶的是,当我收到错误时,我使用的是 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;我认为允许任一种协议都没有缺点。

标签: c# security ssl networking https


【解决方案1】:

经过相当多的实验,我找到了解决方案,但我仍然感到困惑。解决方案原来是使用

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11;

这并不奇怪。令人惊讶的是,当我收到错误时,我正在使用

System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls11 | System.Net.SecurityProtocolType.Tls12;

我指定了这两种协议,因为我不确定远程服务器正在使用哪个协议,而且我认为允许使用任何一种协议都没有缺点。

现在我想知道为什么允许第二个协议会导致应用程序无法建立安全通道。

【讨论】:

  • 我能想到两种可能性。一是网络服务器行为不端,没有协商较低的协议。一些服务器在提供他们不理解的 TLS 版本时会崩溃,而不是选择较低的版本。第二种可能性是协商了 TLS 1.2,但无法为 TLS 1.2 选择密码套件。例如,客户端可能会说“RC4 可以与 TLS 1.1 或更低版本一起使用”,而服务器仅支持 RC4。
  • 优秀的建议:谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-18
  • 1970-01-01
相关资源
最近更新 更多