【问题标题】:TLS 1.2 handshake still possible after only allowing TLS 1.0仅允许 TLS 1.0 后仍然可以进行 TLS 1.2 握手
【发布时间】:2018-02-06 12:07:56
【问题描述】:

我的一位客户在操作系统级别关闭了 TLS 1.0。之后与我们产品的连接不再起作用。客户没有使用 .NET 4.6.1 的最新版本。

由于我们没有指定使用的协议,我们依赖于默认值。根据https://support.microsoft.com/en-us/help/3069494/cannot-connect-to-a-server-by-using-the-servicepointmanager-or-sslstre.NET 4.6 默认启用 TLS 1.2,这将是完美的,也是我们想要的。

我想尝试一些配置,以便更好地理解。我指定仅在代码级别允许 TLS 1.0:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;

为了测试握手,我使用了 openssl。它应该与 TLS 1.0 完美配合。但令我惊讶的是,握手也适用于 TLS 1.2。

$ openssl s_client -connect localhost:30050 -tls1_2
<..snip..>
SSL-Session:
    Protocol  : TLSv1.2
    <..snip..>

我正在监督一些 .NET 或 TLS 规则吗?据我了解,当将 TLS 1.0 指定为唯一协议时,TLS 1.2 应该是不可能的。

【问题讨论】:

  • 您如何/在哪里使用该代码?你的服务器是什么?
  • 如果在协商过程中可以升级,允许升级似乎是明智的,该属性状态的文档 您的代码不应隐含地依赖于使用特定的保护级别,或者假设默认使用给定的安全级别
  • @CamiloTerevinto 我在控制台中托管 WCF 服务。
  • 设置SecurityProtocol 是否影响入站出站 http 连接?
  • @mjwills 我认为你成功了。根据stackoverflow.com/questions/26389899/… 中的评论:如果您从 .NET 代码启动出站连接,则只需设置 System.Net.ServicePointManager.SecurityProtocol,例如从服务器上运行的自定义代码连接到 Web 服务或 API。如果您只运行一个简单的网站,并且只接受来自浏览器的传入连接,那么注册表修复就足够了。

标签: c# .net ssl cryptography tls1.2


【解决方案1】:

cmets 中的 mjwills 询问SecurityProtocol-属性是否影响入站或出站连接。

经过一番研究,我发现了 How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation) 的帖子,其中有一条可以回答问题的评论:

只需要设置 System.Net.ServicePointManager.SecurityProtocol 如果您要从 .NET 代码启动出站连接,例如从服务器上运行的自定义代码连接到 Web 服务或 API。如果您只运行一个简单的网站,并且只接受来自浏览器的传入连接,那么注册表修复就足够了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-06
    • 1970-01-01
    • 2010-09-20
    • 2015-10-30
    • 2018-10-20
    • 2016-08-07
    • 2021-10-13
    • 1970-01-01
    相关资源
    最近更新 更多