代码之家  ›  专栏  ›  技术社区  ›  Borgiman

仅允许TLS 1.0后仍可以进行TLS 1.2握手

  •  1
  • Borgiman  · 技术社区  · 7 年前

    我的一位客户在操作系统级别关闭了TLS 1.0。之后,与我们的产品的连接不再工作。客户没有使用的最新版本。净额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。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Borgiman    7 年前

    mjwills在评论中询问,如果 SecurityProtocol -属性影响入站或出站连接。

    经过研究,我找到了这篇文章 How do I disable SSL fallback and use only TLS for outbound connections in .NET? (Poodle mitigation) 其中有一条评论可以回答这个问题:

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