漏洞修复:TLS Client-initiated重协商攻击(CVE-2011-1473)

目录

一、漏洞描述

二、漏洞验证

三、实现方式

四、解决方法

1.通过代码添加

2.通过启动参数添加

五、openssl s_client命令


一、漏洞描述

服务器支持 TLS Client-initiated 重协商攻击(CVE-2011-1473)【原理扫描】

使用绿盟等漏洞扫描工具扫描https端口的服务时可能会出现该漏洞。

二、漏洞验证

使用openssl命令可以连接当前监听的https端口并验证是否支持重协商。

openssl s_client -connect host:port

连接之后输入R,回车。

若没有断开连接则说明该服务存在ssl/tls重协商。

若断开则说明服务禁用了ssl/tls重协商。

三、实现方式

该漏洞一般出现在使用原生JSSE的Socket实现的tcp服务上,具体如何实现可以参考下面的文章。

SSlSocket和SSLServerSocket的学习 jks,bks的使用_java sslserversocket-CSDN博客

若是Tomcat等Servlet容器实现https服务则没有扫描出该漏洞,且通过上述验证方式输入R回车之后会卡住一段时间后报错。了解到ssl/tls重协商也分为安全的重协商和不安全的重协商,具体没有深究。这里只说明如果扫描出该漏洞如何修复。

四、解决方法

在建立Socket之前添加jvm系统属性禁用ssl/tls重协商。可以通过在程序代码中添加,也可以通过添加启动参数添加.

1.通过代码添加

System.setProperty("jdk.tls.rejectClientInitiatedRenegotiation", "true");

2.通过启动参数添加

java -jar test.jar -Djdk.tls.rejectClientInitiatedRenegotiation=true

五、openssl s_client命令

openssl s_client 命令及选项解释。

openssl s_client [-connect host:port>] [-verify depth] [-cert filename] [-key filename] [-CApath directory] [-CAfile filename] [-reconnect] [-pause] [-showcerts] [-debug] [-nbio_test] [-state] [-nbio] [-crlf] [-ign_eof] [-quiet] [-ssl2] [-ssl3] [-tls1] [-no_ssl2] [-no_ssl3] [-no_tls1] [-bugs] [-cipher cipherlist]

描述:用于模拟一个普通的SSL/TLS client,对于调试和诊断SSL server。 

选项

1.         -connect host:port:这个不用解释了吧,连接的ip:port.

2.         -cert certname:使用的证书文件。如果server不要求要证书,这个可以省略。

3.         -key keyfile:使用的私有密钥文件。

4.         -verify depth:指定验证深度。记得CA也是分层次的吧?如果对方的证书的签名CA不是Root CA,那么你可以再去验证给该CA的证书签名的CA,一直到Root CA。目前的验证操作即使这条CA链上的某一个证书验证有问题也不会影响对更深层的CA的身份的验证。所以整个CA链上的问题都可以检查出来。当然CA的验证出问题并不会直接造成连接马上断开,好的应用程序可以让你根据验证结果决定下一步怎么走。

5.         -CApath directory:一个目录。里面全是CA的验证资料,该目录必须是“哈希结构”。verify指令里会详细说明。在建立client的证书链的时候也有用到这个指令。

6.         -CAfile file:某文件,里面是所有你信任的CA的证书的内容。当你要建立client的证书链的时候也需要用到这个文件。

7.         –reconnect:使用同样的session-id连接同一个server五次,用来测试server的session缓冲功能是否有问题。

8.         –pause:每次读写操作后都停顿一秒。

9.         –showcerts:显示整条server的证书的CA的证书链。否则只显示server的证书。

10.     –prexit:当程序退出的时候打印session的信息。即使连接失败,也会打印出调试信息。一般如果连接成功的话,调试信息将只被打出来一次。本option比较有用,因为在一次SSL连接中,cipher也可能改变,或者连接可能失败。要注意的是:有时候打印出来的东西并不一定准确。(这样也行??eric,言重了)

11.     –state:打印SSL session的状态,ssl也是一个协议,当然有状态。

12.     –debug:打印所有的调试信息。

13.     -nbio_test:检查非阻塞socket的I/O运行情况。

14.     –nbio:使用非阻塞socket。

15.     –crlf:会把你在终端输入的换行回车转化成/r/n送出去。

16.     -ign_eof:当输入文件到达文件尾的时候并不断开连接。

17.     –quiet:不打印出session和证书的信息。同时会打开-ign_eof这个option。

18.     -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1:选择用什么版本的协议。很容易理解,不用多解释了吧。注意,有些很古老的server就是不能处理TLS1,所以这个时候要关掉TLS1.n.

19.     –bugs:SSL/TLS有几处众所周知的bug,set了这个option使出错的可能性缩小。

20.     -cipher cipherlist:由我们自己来决定选用什么cipher,尽管是由server来决定使用什么cipher,但它一般都会采用我们送过去的cipher列表里的第一个cipher。有哪些cipher可用?指令cipher对这个解释的更清楚。一旦和某个SSL server建立连接之后,所有从server得到的数据都会被打印出来,所有你在终端上输入的东西也会被送给server。这是人机交互式的。这时候不能set -quiet和 -ign_eof这俩个option。如果输入的某行开头字母是R,那么在这里session会renegociate,如果输入的某行开头是Q,那么连接会被断开。你完成整个输入之后连接也会被断开。(If a connection is established with an SSL server then any data received from the server is displayed and any key presses will be sent to the server. When used interactively (which means neither -quiet nor -ign_eof have been given), the session will be renegociated if the line begins with an R, and if the line begins with a Q or if end of file is reached, the connection will be closed down.)本指令主要是来debug一个SSL server的。如果想连接某个SSL HTTP server,输入下一条指令:openssl s_client -connect servername:443。如果连接成功,你可以用HTTP的指令,比如"GET /"什么的去获得网页了。如果握手失败,原因可能有以下几种:1. server需要验证你的证书,但你没有证书。2.如果肯定不是原因1,那么就慢慢一个一个set以下几个option:-bugs, -ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1。这可能是因为对方的server处理SSL有bug.。有的时候,client会报错:没有证书可以使用,或者供选择的证书列表是空的。这一般是因为Server没有把给你签名的CA的名字列进它自己认为可以信任的CA列表,你可以用检查一下server的信任CA列表。有的http server只在client给出了一个URL之后才验证client的证书,这中情况下要set -prexit这个option,并且送给server一个页面请求。即使使用-cert指明使用的证书,如果server不要求验证client的证书,那么该证书也不会被验证。所以不要以为在命令行里加了-cert的参数又连接成功就代表你的证书没有问题。如果验证server的证书没有问题,就可以set -showcerts来看看server的证书的CA链了。其实这个工具并不好用,自己写一个client的会方便很多。

引用下面文章中openssl命令的使用:

https://www.cnblogs.com/LiuYanYGZ/p/10405631.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/11704.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Halcon进行图像预处理的策略

图像预处理是机器视觉系统中的一个关键步骤,它有助于提高图像质量,从而使得后续的图像分析和特征提取更加准确。在 Halcon 中,图像预处理通常包括滤波、对比度增强、归一化、边缘增强等操作。以下是一些使用 Halcon 进行图像预处理的策略&…

【React】React的懒加载组件lazy和Suspense

在一个多路由项目中,页面加载时,所有的路由组件都会被加载 如果我们有很多个路由组件,但是用户只点击了几个,这就会有很大的消耗,因此我们需要做懒加载处理,我们点击哪个时,才去加载哪一个 而Re…

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量(boolean) 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

go使用nacos作为配置中心时遇到的一个错误

docker安装nacos如下(有坑): 一文教你使用 Docker 启动并安装 Nacos-阿里云开发者社区 报错如下: read config from both server and cache fail, errread cache file Config Encrypted Data Key failed. cause file doesnt ex…

百亿补贴为什么用 H5?H5 未来会如何发展?

百亿补贴为什么用 H5?H5 未来会如何发展? 本人有一些分析预测。当然,这些分析预测只是个人观点,如果你有不同的意见,欢迎在评论区讨论交流。 百亿补贴为什么用 H5 我们先看两张图,在 Android 手机开发者…

java设计模式 建造者设计模式

建造者模式(Builder Pattern)是一种设计模式,用于将复杂对象的构建与其表示分离,以便同样的构建过程可以创建不同的表示。以下是建造者模式的一个案例分析,以及在Java中的实现。 ### 案例分析 假设我们要设计一个用于…

单元测试与集成测试:软件质量的双重保障

目录 概述 单元测试 集成测试 单元测试的方法 白盒测试 黑盒测试 白盒测试的方法和用例设计 代码审查 集成测试 单元测试工具 结语 在软件开发中,测试是一个不可或缺的环节,它能够帮助我们发现和修复缺陷,确保软件的质量和可靠性。…

基于UDP的网络客户端和服务端模型IO函数

服务器端 udp_server.c #include <stdio.h> // 引入标准输入输出库 #include <sys/types.h> // 引入基本系统数据类型 #include <sys/socket.h> // 引入socket编程相关的库 #include <netinet/in.h> // 引入网络…

2024年3月 青少年等级考试机器人理论真题二级

202403 青少年等级考试机器人理论真题二级 第 1 题 一个机器小车&#xff0c;用左右两个电机分别控制左右车轮&#xff0c;左侧电机转速是100rpm&#xff0c;右侧电机转速是50rpm&#xff0c;则此机器小车&#xff1f;&#xff08; &#xff09; A&#xff1a;原地右转 B&am…

华企盾DSC数据防泄密软件有哪些水印功能?

在企业数据安全领域&#xff0c;水印技术是一种重要的信息保护策略&#xff0c;用于防止数据泄露和确保信息的原始性和完整性。根据回顾的资料&#xff0c;以下是企业中常用的几种水印技术&#xff1a; 屏幕浮水印&#xff1a;这种水印能够在用户的屏幕上显示公司的标志或者其他…

Golang SDK安装

windows环境安装 1.链接: 下载地址 2.安装SDK 检查环境变量&#xff1a; 3.开启go modules,命令行执行一下命令&#xff1a; go env -w GO111MODULEon4.设置国内代理&#xff0c;命令行执行一下命令&#xff1a; go env -w GOPROXYhttps://proxy.golang.com.cn,https:/…

C#之partial关键字

在C#中&#xff0c;partial关键字用于声明一个类、结构体、接口或方法的分部定义。这意味着可以将一个类或其他类型的定义分成多个部分&#xff0c;这些部分可以在同一个命名空间或程序集中的多个源文件中进行定义。当编译器编译这些部分时&#xff0c;会将它们合并成一个单独的…

打印机 ansible配置dhcp和打印机

部署dhcp服务器 主机发送Discover报文 目标为广播地址 同一网段的dhcp收到报文后&#xff0c;dhcp响应一个offer报文 offer报文&#xff1a;dhcp自己的ip地址。和客户端ip以及使用周期&#xff0c;和客户端ip网络参数 最后主机单独发一个request报文 给那个选择的dhcp服务器 &…

JUC下的ThreadLocalRandom详解

ThreadLocalRandom 是Java并发包&#xff08;java.util.concurrent&#xff09;中提供的一个随机数生成器类&#xff0c;它是从Java 7开始引入的。相较于传统的Math.random()或Random类&#xff0c;ThreadLocalRandom更适用于多线程环境&#xff0c;因为它为每个线程维护了一个…

福建医疗器械展/2024厦门国际医疗器械展览会重磅来袭

2024中国&#xff08;厦门&#xff09;国际医疗器械展览会 时 间&#xff1a;2024年11月1-3日 November 1-3, 2024 地 点&#xff1a;厦门国际会展中心 Xiamen International Conference & Exhibition Center ​ ◆组织机构 主办单位&#xff1a; 中国技术市场协会医…

Blazor入门-调用js+例子

参考&#xff1a; Blazor入门笔记&#xff08;3&#xff09;-C#与JS交互 - 半野 - 博客园 https://www.cnblogs.com/zxyao/p/12638233.html Blazor项目如何调用js文件_blazor加载js-CSDN博客 https://blog.csdn.net/bdbox/article/details/135438411 本地环境&#xff1a;win1…

六西格玛绿带培训:企业变革的催化剂,个人成长的助推器!

六西格玛绿带培训不仅是一套系统的管理方法&#xff0c;更是一种追求卓越、持续改进的文化和思维方式。它强调以数据为基础&#xff0c;通过科学的分析和决策&#xff0c;实现质量的飞跃和成本的优化。对于企业来说&#xff0c;六西格玛绿带培训能够帮助企业建立可靠的质量管理…

Spring STOMP-消息代理

简单的消息代理 内置的简单消息代理会处理来自客户端的订阅请求&#xff0c;将请求消息存储在内存中&#xff0c;并广播消息给匹配destination的连接客户端。代理支持路径式destination&#xff0c;包括订阅Ant风格的destinations模式。 应用程序也可以使用点分隔&#xff08;…

【车辆安全管理】风险预测

近期又发生了很多车辆事故&#xff0c; https://news.sina.com.cn/s/2024-05-13/doc-inavapur2236074.shtml 其实都是可以避免的&#xff0c;如果车辆有很好的自动减速系统&#xff0c;如特斯拉的FSD系统&#xff0c; 特斯拉的FSD&#xff08;Full-Self Driving&#xff09;…

11、24年--信息技术发展——新一代信息技术及应用

1、物联网 物联网(The Internet of Things)是指通过信息传感设备,按约定的协议将任何物品与互联网相连接,进行信息交换和通信,以实现智能化识别、定位、跟踪、监控和管理的网络。 1.1 技术基础 物联网架构可分为三层:感知层、网络层和应用层。感知层由各种传感器…