zoukankan      html  css  js  c++  java
  • .NET Core TLS 协议指定被我钻了空子~~~

    前言

    此前,测试小伙伴通过工具扫描,平台TLS SSL协议支持TLS v1.1,这不安全,TLS SSL协议至少是v1.2以上才行,想到我们早已将其协议仅支持v1.3,那应该非我们平台问题。我依然自信的解释,与我们平台无关,应与openssl自身配置支持v1.1有关,但此问题必须得到解决,抱着半信半疑的态度,难道是代码问题?于是乎,开始探索之路,本文以ASP.NET Core 3.1.20作为示例

    验证TLS SSL协议问题

    由于平台相关配置启用太多,以排除带来的影响,我单独写了一个干净的web api,代码如下。

    webBuilder.UseStartup<Startup>();
    webBuilder.UseKestrel(options => 
    {
        var sslCertPath = Path.Combine(AppContext.BaseDirectory, "ssl.pfx");
    
        options.Listen(IPAddress.Any, 5000,
            listenOption =>
            {
                listenOption.UseHttps(sslCertPath, "KSnRJkGPf@OVA8uDsY*D5EP4kd!AagLS84uNS~5@@u#dKrNxHC");
            });
    
        options.ConfigureHttpsDefaults(co =>
        {
          co.SslProtocols = SslProtocols.Tls13;
        });
    
    });

    然后我们将其发布到linux上并运行起来,如下

    接下来我们借助nmap工具扫描该端口,如下:

    耐心等待一会,最终扫描输出结果如下,我惊呆了

     .NET Core TLS SSL协议默认启用的是支持v1.1和v1.2,明明设置的是仅支持v1.3,这不是和没设置一样吗?

    webBuilder.UseStartup<Startup>();
    webBuilder.UseKestrel(options => 
    {
        var sslCertPath = Path.Combine(AppContext.BaseDirectory, "ssl.pfx");
    
        options.ConfigureHttpsDefaults(co =>
        {
            co.SslProtocols = SslProtocols.Tls12;
        });
    
        options.Listen(IPAddress.Any, 5000,
            listenOption =>
            {
                listenOption.UseHttps(sslCertPath, "KSnRJkGPf@OVA8uDsY*D5EP4kd!AagLS84uNS~5@@u#dKrNxHC");
            });
    
    });

    那只能说明代码有问题,既然已经设置了,但是未生效,so,那说明放的顺序有问题,那我将上述设置协议放在监听HTTPS之前又会如何呢?如上,首先我们配置仅支持v1.2,会不会扫描出v1.1呢?

    至此,TLS SSL协议指定已经得到了解决,稍加思索,想想也正常,监听端口之前,必须建立连接,所以协议配置肯定在监听端口之前指定,讲到这里,我们进一步稍加了解原理,对于协议和端口监听整个过程大概是怎样的,我们首先看看通过指定SSL证书路径和密码监听HTTPS内置的大致实现

    监听HTTPS存在多个重载,看来都是通过X509Certificate2来加载证书、验证证书等等操作

    内置赋值上述类加载证书,然后在如下扩展方法中应用各个选项,如下标注即为引用进行连接的选项

     

    由于我们在开始时将SSL v1.3协议配置在监听HTTPS下面,所以执行到这里时,使用的默认协议1.1和1.2

    同时需要注意一点的是:在.NET Core 3.x版本中,证书密码必须提供,但此种情况我通过查看源码,若没记错的话,应该是5.x中,证书密码可以为空

    其实在监听HTTPS扩展方法中提供了所使用连接TLS SSL协议的重载,当时配置时没想那么多,因为此前配置已经写好,平台根据实际情况可开启HTTP或HTTPS,所以直接调用默认HTTPS选项配置,结果大意了

    当然若明确必须是HTTPS协议,我们也可以基于默认配置去修改,如下:

    webBuilder.UseStartup<Startup>();
    webBuilder.UseKestrel(options =>
    {
        var sslCertPath = Path.Combine(AppContext.BaseDirectory, "ssl.pfx");
    
        options.ConfigureHttpsDefaults(co =>
        {
            co.SslProtocols = SslProtocols.Tls13;
            co.ServerCertificate = new X509Certificate2(sslCertPath, "KSnRJkGPf@OVA8uDsY*D5EP4kd!AagLS84uNS~5@@u#dKrNxHC");
        });
    
        options.Listen(IPAddress.Any, 5000);
    
    });

    总结

    没啥可总结的,大意失荆州,捂脸中......,一度怀疑配置了v1.3,但工具扫描却支持1.1和1.2,认为问题出在openssl配置支持的问题,未曾想一时疏忽,一顿操作,没考虑建立连接过程,则对应配置顺序也应一致,.NET Core提供多种配置,然鹅我却刚好卡在中间,自己钻了自己的空子。后面多学习,开始多写写.NET Core在Linux上的部署、操作等等之类的,好了,我们下次再见!

    所有的选择不过是为了下一次选择做准备
  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/CreateMyself/p/15484724.html
Copyright © 2011-2022 走看看