【问题标题】:What version of TLS does my C# program use?我的 C# 程序使用什么版本的 TLS?
【发布时间】:2018-04-03 23:24:55
【问题描述】:

我在 Visual Studio 2013 中开发了一个与 SOAP Web 服务通信的 C# 程序。如何判断我的程序使用的是哪个版本的 TLS?

【问题讨论】:

  • 这不是由网络服务器决定的吗?为什么需要知道?
  • 检查支持的协议的ServicePointManager.SecurityProtocol 值。
  • 只需启用ServicePointManager.SecurityProtocol 上的所有功能,您就可以开始了,对吧?
  • @MickyD 如果运行时不支持 1.2,服务器将拒绝连接。
  • @rene 几年前,几家大型服务提供商(想想航空公司)甚至放弃了 TLS1.1。很多公司不得不争先恐后地升级到 .NET 4.5.2

标签: c# visual-studio ssl visual-studio-2013 tls1.2


【解决方案1】:

我通过指示我的程序向https://www.howsmyssl.com/a/check 发出请求得到了答案。

【讨论】:

  • 我喜欢测试我的程序的行为,而不仅仅是依赖文档。
  • 我不明白对这个答案的蔑视。它使用经验测试,可以推广到其他服务器类型。
【解决方案2】:

在 .NET 4.5 中添加了 TLS 1.2。 .NET 支持的最早版本是 4.5.2,所以如果您使用支持的版本,不会有任何问题。

.NET 4.6 默认使用 TLS 1.2。早期版本需要这一行来启用它:

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

TLS 1.0 正在逐步淘汰,并且 SSL v3 被认为已损坏,因此不应添加它们。

【讨论】:

  • 您能否链接到确认 .NET 4.6 默认使用 TLS 1.2 的来源?我找不到任何官方信息,并且可以看到其他评论与此相矛盾,例如:stackoverflow.com/a/47913910/5344430
  • 不要从 4.6 开始,不要尝试对版本进行硬编码。只需搜索.NET TLS 1.2 就会返回Transport Layer Security (TLS) best practices with the .NET Framework 作为第一个结果。在受支持的操作系统上使用 .NET 4.7,并让您的应用程序使用最佳可用的 TLS 版本。甚至 4.6.2 在 TLS 程序集重定向上都有些混乱。
  • 我不会使用 4.6。我真的只是想知道你从哪里得到“4.6 默认使用 TLS 1.2”的信息,因为我在任何地方都找不到。你是如何确认/证明的?
  • 我已经发布了链接。 3 年前,我回答了How can I tell which version of TLS my program uses? 的问题,但答案不是 VS 2013。要获得 TLS 1.2 无需代码修改,您至少需要 4.6。到那时,我多年来已经回答了这个问题几十次,并且没有费心发布另一个完整的解释。到那时(就像 SO 中的许多常见问题一样),仅仅找到一个好的副本比写一个快速的答案需要更多的时间
  • @alksdjg 和 real 问题毕竟是作为对 Oria 的回答 As my production web service calls were communicating with a 3rd party service, I needed an extra proof of which protocol was being used before and after I made the .net version change. 的评论发布的
【解决方案3】:

另一个检查的好方法是安装 WireShark (https://www.wireshark.org/download.html)

并在运行应用程序时使用它。 在 TLS 数据包中,您将能够看到版本等:

Example for Wireshark View Of TLS traffic...

【讨论】:

  • 没有理由这样做。没有歧义。 4.6 -> TLS1.2 默认 4.5 -> TLS11 和 1.2 的配置更改。 4 及以下,无 TLS 1.2
  • 4 及以下支持带有修补程序的 TLS 1.2。
  • @jessehouwing 更糟糕的是,这些修补程序依赖于一些众所周知的 hack 来在代码中工作,例如将枚举的值分配给 SecurityProtocol,即使它没有被定义。 2 年前,当供应商开始要求 TLS1.2 时,这被用作权宜之计
猜你喜欢
  • 2014-12-12
  • 2020-07-12
  • 2017-12-04
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2017-12-05
  • 2012-09-12
相关资源
最近更新 更多