前言

此前,测试小伙伴通过工具扫描,平台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上的部署、操作等等之类的,好了,我们下次再见!

.NET Core TLS 协议指定被我钻了空子~~~的更多相关文章

  1. 利用DNS缓存和TLS协议将受限SSRF变为通用SSRF

    本文首发于先知社区 前言 这是今年BlackHat上的一个议题:When TLS Hacks You,作者是latacora的Joshua Maddux 议题提出了一个新的ssrf攻击思路,利用DNS ...

  2. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程

    相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868.shtml http://www.gxu.edu.cn/college ...

  3. [转载] TLS协议分析 与 现代加密通信协议设计

    https://blog.helong.info/blog/2015/09/06/tls-protocol-analysis-and-crypto-protocol-design/?from=time ...

  4. 【转】Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    本文转自:http://www.wjdiankong.cn/wireshark%E5%92%8Cfiddler%E5%88%86%E6%9E%90android%E4%B8%AD%E7%9A%84tl ...

  5. SSL、TLS协议格式、HTTPS通信过程、RDP SSL通信过程(缺heartbeat)

    SSL.TLS协议格式.HTTPS通信过程.RDP SSL通信过程   相关学习资料 http://www.360doc.com/content/10/0602/08/1466362_30787868 ...

  6. SSL和TLS协议的区别

    SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层.SSL通过互相认证.使用数字签名确保完整性.使用加密确保私密性,以实现客户 ...

  7. TLS协议分析

    TLS协议分析 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解 ...

  8. 实验六 TLS协议报文解析

    一.实验目的 1.访问一个https://....的网站,捕TLS包并分析报文序列. 2.分析连接建立的完整过程,如:TCP三次握手.SSL安全连接,使用TLS协议连接.协商过程,加密传送的状态.TC ...

  9. android黑科技系列——Wireshark和Fiddler分析Android中的TLS协议包数据(附带案例样本)

    一.前言 在之前一篇文章已经介绍了一款网络访问软件的破解教程,当时采用的突破口是应用程序本身的一个漏洞,就是没有关闭日志信息,我们通过抓取日志获取到关键信息来找到突破口进行破解的.那篇文章也说到了,如 ...

随机推荐

  1. 使用Dockerfile Maven插件

    我们常见开源项目中使用的Docker Maven插件是com.spotify:docker-maven-plugin.可用版本信息见Github. 通过其介绍可知该插件已经不再推荐使用,取而代之的是c ...

  2. 成本降低40%、资源利用率提高20%的 AI 应用产品云原生容器化之路

    作者 郭云龙,腾讯云高级工程师,目前就职于 CSIG 云产品三部-AI 应用产品中心,现负责中心后台业务框架开发. 导语 为了满足 AI 能力在公有云 SaaS 场景下,服务和模型需要快速迭代交付的需 ...

  3. PHP中的对象比较

    在之前的文章中,我们讲过PHP中比较数组的时候发生了什么?.这次,我们来讲讲在对象比较的时候PHP是怎样进行比较的. 首先,我们先根据PHP文档来定义对象比较的方式: 同一个类的实例,比较属性大小,根 ...

  4. (转载)Select for update/lock in share mode 对事务并发性影响

    select for update/lock in share mode 对事务并发性影响 事务并发性理解 事务并发性,粗略的理解就是单位时间内能够执行的事务数量,常见的单位是 TPS( transa ...

  5. GCN数据集Cora、Citeseer、Pubmed文件分析

    简介 本文将对Cora.Citeseer.Pubmed 数据集进行详细介绍 Cora.Citeseer.Pubmed 数据集 来源 图 节点 边 特征 标签(y) Cora "Collect ...

  6. Linux系列(42) - 防火墙相关命令

    # 开启 service firewalld start # 重启 service firewalld restart # 关闭 service firewalld stop # 查看防火墙规则 fi ...

  7. Docker系列(20)- 数据卷容器

    数据卷容器 什么是数据卷容器? 容器和容器之间实现数据共享 一个容器先于宿主机创建挂载方式,宿主机就会有改卷的目录 第二个容器使用命令--volumes-from 第一个容器,共享使用了第一个容器与宿 ...

  8. Linux系列(6) - 常见目录

    linux 一级目录有严格规定,脚本文件等放在root/home/tmp目录中,减少在根目录的操作 目录名称 作用 / 根目录 /bin 命令保存目录(普通用户就可以读取的命令); 根目录下的bin和 ...

  9. csv或excel的utf-8乱码问题

    方法1.数据导入 打开 Excel,执行"数据"->"自文本",选择 CSV 文件,出现文本导入向导,选择"分隔符号",下一步,勾选& ...

  10. mybatis多条件多值批量更新

    mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现. 这里使用了case when 这个小技巧来实现批量更新. 举个例子: UPDATE 表名 SET    display_ord ...