使用wireshark抓包,验证客户端和服务端SSL通信时指定的算法套件

前情提要

  • 使用Clion和gmssl动态库实现服务器server和客户端client之间的SSL通信,测试指定密码套件_MY CUP OF TEA的博客-CSDN博客
  • 在基于 Ubuntu 的 Linux 发行版上安装 Wireshark_MY CUP OF TEA的博客-CSDN博客
  • 本地搭建server和客户端使用端口进行数据通信,使用Wireshark抓取127.0.0.1环回地址并分析通信数据_MY CUP OF TEA的博客-CSDN博客_wireshark抓127.0.0.1
  • 使用wireshark抓包,本地环回测试通信数据已经通过SM4国密算法加密_MY CUP OF TEA的博客-CSDN博客_sm4 在线测试

参考链接

  • 用wireshark抓包分析TLS协议_GEEK_BD_bro的博客-CSDN博客_wireshark 过滤tls

启动wireshark

  • 虽然配置wireshark的时候,选择所有用户均可进行抓包,但是在真正使用的时候,普通用户还是会存在问题,通过鼠标点击图标的方式启动wireshark,默认是当前用户,不是root用户,不光界面不一样,且不允许抓包
  • 开启终端,使用命令 sudo wireshark 开启wireshark软件,进行抓包
  • 参考上述链接里面的server和客户端的代码,指定ip地址为127.0.0.1,端口为7838,因此本文采用本地环回的方式进行数据包的抓取和分析

操作流程

  • wireshark 选择本地环回
  • 在过滤栏设置过滤条件进行数据包列表过滤输入 tls,表示只显示TLS协议的数据包

  • 开启服务端
  • 开启客户端

补充知识

  • SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。
  • SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。
  • SSL (Secure Socket Layer)安全套接字层协议
    • SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。
    • 分为SSL记录协议和SSL握手协议。
  • TLS(Transport Layer Security)传输层安全协议
    • 用于两个应用程序之间提供保密性和数据完整性。
    • 分为TLS记录协议和TLS握手协议。
  • 区别:
    • SSL是Netscape开发的专门用户保护Web通讯的,目前版本为3.0。
    • TLS 1.0是IETF(工程任务组)制定的一种新的协议,它建立在SSL 3.0协议规范之上,是SSL 3.0的后续版本。两者差别极小,可以理解为SSL 3.1,它是写入了RFC的

在这里插入图片描述

 服务端和客户端通信流程

在这里插入图片描述

 蓝色表示客户端-->服务端绿色表示服务端 --> 客户端

  • Client Hello:客户端向服务端打招呼;携带支持的协议、支持的安全套件供服务端选择;
  • Server Hello:服务端回应客户客户端的招呼信息;结合客户端的信息,选择合适的加密套件;
  • Certificate:服务端向客户端发送自己的数字证书(此证书包含服务端的公钥),以实现验证身份;
  • Server Key Exchange:服务端向客户端发送基于选择的加密套件生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
  • Server Hello Done:服务端向客户端表示响应结束;
  • Client Key Exchange:客户端向服务端发送自己生成的公钥(此公钥为椭圆曲线的公钥,用于协商出对称加密的密钥);
  • Change Cipher Spec:变更密码规范;告知服务端/客户端,以后的通信都是基于AES加密的;
  • Encrypted Handshake Message:基于协商生成的密钥,用AES加密验证信息让服务端/客户端进行认证;如果对方可以解密,则双方认证无误开始通信;
  • New Session Ticket:是优化SSL连接的一种方法,此处不做特别说明
  • 注:Certificate Request:服务器如果需要验证客户端的身份,那么服务器会发一个“Certificate Request”给浏览器,而在很多实现中,服务器一般不需要验证客户端的身份

 协议包分析

Client Hello包

  • Random Bytes:客户端产生的28字节随机数,用于生成最终密钥,后面的过程还会传递两个随机数,三个随机数做为EC Diffie-Hellman算法的相关参数,运算出会话密钥。先把这个随机数称为random_c.
  • Session ID:会话标识符:如果是一个新的连接,这个值为0
  • Cipher Suites:加密套件(客户端共支持17个加密套件),服务器会从中选择一个服务器也支持的加密套件
  • Compression Methods:客户端支持的压缩方法
  • Extension: ALPN:客户端支持的应用层协议;未找到依据
  • Extension: signature_algorithms: 客户端支持的签名算

Cipher Suites:Unknown(0xe107)

  • 客户端内部指定了gmssl支持的密码学套件
  • 0xE1,0x07 - ECDHE-SM2-WITH-SMS4-GCM-SM3    TLSv1.2    Kx=ECDH     Au=SM2    Enc=SMS4GCM(128)            Mac=AEAD

        //指定密码算法套件// gmssl ciphers -V 明确支持SSL_CTX_set_cipher_list(ctx,"ECDHE-SM2-WITH-SMS4-GCM-SM3");

 Server Hello, Certificate, Certificate Status, Server Key Exchange, Server Hello Done包

Server Hello段 

  • Random Bytes:服务器生成的随机数random_s
  • Cipher Suites:服务器选择的加密套件:0xe107
  • Compression Methods:服务器选择的压缩算法为NULL压缩算法。(不支持任何压缩算法),压缩基本由应用层来完成。

 Certificate

  • Certificate: 服务器返回了两个证书: 第一个是CA签发的证书(Bing),本模拟实验中,此处是指服务器证书;第二个是CA链的证书,本模拟实验中,此处是指CA根证书。
  • 客户端收到这个证书后,可以根据证书链来验证证书的真伪,进而判断服务器是真是假。服务器和客户端的证书均是由根CA进行签名认证的
  • 服务器证书中存放一个公钥,用于加密后面生成的Premaster secret

Server Key Exchange段

  •  受限于特定的密码算法套件

Certificate Request

  • Certificate Request:服务器如果需要验证客户端的身份,那么服务器会发一个“Certificate Request”给浏览器,而在很多实现中,服务器一般不需要验证客户端的身份

Server Hello Done段

Client Key Exchange, Change Cipher Spec, Encrypted Handshake Message 包

Certificate

  •  服务端开启了对于客户端的身份认证
  • 第一个是CA签发的证书(Bing),本模拟实验中,此处是指客户端证书;第二个是CA链的证书,本模拟实验中,此处是指CA根证书。
  • 服务器收到这个证书后,可以根据证书链来验证证书的真伪,进而判断客户端是真是假。服务器和客户端的证书均是由根CA进行签名认证的

Client Key Exchange段

​​​​​​​

 Certificate Verify

Change Cipher Spec段 

  • 变更密码规范协议,它非常简单,就是一条通知消息,告知对方以后的通信都是加密的;

 Encrypted Handshake Message

  •  客户端使用生成的对话密钥,加密之前所有收发握手消息的Hash和MAC值,发送给服务器,服务器将相同的会话密钥(使用相同方法生成)解密此消息,校验其中的Hash和MAC值。
  • 注意:Change Cipher Spec和Encrypted Handshake Message不像Client Hello、Server Hello等是封装在 Handshake Protocol层,而是同Handshake Protocol一样,直接封装在TLS Record Layer层。

Change Cipher Spec, Encrypted Handshake Message包

  • Change Cipher Spec:服务器发送Change Cipher Spec消息,通知客户端此消息以后服务器会以加密方式发送数据。服务器使用会话密钥加密之前所有收发握手消息的Hash和MAC值,发送给客户端去校验。
  • 若客户端服务器都校验成功,握手阶段完成,双方将按照SSL记录协议的规范使用协商生成的会话密钥加密发送数据。
  • 可以看到,之后服务器开始向客户端发送加密消息Application Data。

 Application Data包

  • 客户端开始向服务器发送加密数据

​​​​​​​

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

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

相关文章

r语言随机森林回归预测_从零实现回归随机森林

一、前言回归随机森林作为一种机器学习和数据分析领域常用且有效的算法,对其原理和代码实现过程的掌握是非常有必要的。为此,本文将着重介绍从零开始实现回归随机森林的过程,对于随机森林和决策树的相关理论原理将不做太深入的描述。本文的目…

openssl编程-基础知识-回调函数

参考内容 OpenSSL编程 赵春平 回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数把一段可执行的代码像参数传递…

hive插件 ranger_Apache Ranger及Hive权限控制

一、Ranger概述1.Ranger简介Apache Ranger提供一个集中式安全管理框架, 并解决授权和审计。它可以对Hadoop生态的组件如HDFS、Yarn、Hive、Hbase等进行细粒度的数据访问控制。通过操作Ranger控制台,管理员可以轻松的通过配置策略来控制用户访问权限。本文章介绍Ranger与Hive集成…

openssl编程-基础知识-OpenSSL简介

参考链接 在ubuntu环境下执行openssl编译和安装_MY CUP OF TEA的博客-CSDN博客_openssl ubuntuOpenSSL编程 赵春平 OpenSSL 简介 它提供的主要功能有:SSL协议实现(包括SSLv2、SSLv3和TLSv1)、大量软算法(对称/非对称/摘要)、大数运算、非对称算法密钥生成、ASN.1编…

linux修改文件句柄数生效_linux系统层面调优和常见的面试题

linux系统层面调优和常见的面试题​mp.weixin.qq.com无论对Spark集群,还是Hadoop集群等大数据相关的集群进行调优,对linux系统层面的调优都是必不可少的,这里主要介绍3种常用的调优:1.linux文件句柄linux在整个系统层面和单个进程…

openssl编程-基础知识-OpenSSL堆栈

堆栈介绍 堆栈是一种先进后出的数据结构openssl 大量采用堆栈来存放数据。它实现了一 个通用的堆栈,可以方便的存储任意数据它实现了许多基本的堆栈操作,主要有:堆栈拷贝(sk_dup)、构建新堆栈(sk_new_null,sk_new&…

小米用户画像_企鹅智库:高学历用苹果中老年用华为 男性用小米女性用OV

不同手机品牌都有着自己不同的定位人群,在国内市场目前几大非常有名的手机品牌分别被三星、苹果、华为、小米、OV占据,而这些手机品牌的主要购买人群到底是什么样的呢?企鹅智库近日发布了一份手机消费者的调研报告,并且根据消费者…

国密gmtls协议-双证书体系的服务端和客户端通信代码

内容介绍 国密的双证书体系,将证书按照使用目的的不同划分为加密证书和签名证书两种,也就是两对公私钥,二者本质一致,均为SM2密钥对,区别仅体现在用法国密CA体系中,加密密钥对由CA产生,签名密钥…

jwt 私钥_什么是 JSON Web Token(JWT)

有关本文档的快速链接,请参考页面提示。什么是 JSON Web Token(JWT)?JSON Web Token (JWT) 作为一个开放的标准 (RFC 7519) 定义了一种简洁自包含的方法用于通信双方之间以 JSON 对象的形式安全的传递信息。因为有数字签名,所以这些通信的信息能够被校验…

server和client之间进行Socket通信,进行数据切片

参考链接 send函数和recv函数 – gudakos memo 注意事项 代码很low&#xff0c;主要看封装的Send函数所体现的切片思想即可 server代码 //udp服务端 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include …

天线下倾角示意图_常用天线和无源器件技术参数汇总

原标题&#xff1a;常用天线和无源器件技术参数汇总一、天线原理天线的定义&#xff1a; 能够有效地向空间某特定方向辐射电磁波或能够有效的接收空间某特定方向来的电磁波的装置。天线的功能&#xff1a; 能量转换-导行波和自由空间波的转换; 定向辐射(接收)-具有一定的方向性…

制作作品图片_不懂人文后期制作流程?来,大师手把手教你

制作前1、处理一张照片思路决定步骤 想要了解学习的老师可以私聊小编fzhdyx222制作后2、2020年最新Camera Raw局部影调和色调的控制想要了解学习的老师可以私聊小编fzhdyx222制作前3、2020年最新Camera Raw基础工具细节性运用想要了解学习的老师可以私聊小编fzhdyx222制作后4、…

xlsx文件打开乱码_Excel 2016 双击无法打开xlsx文件怎么办?

最近我重装了系统(Win10Office2016)&#xff0c;然后发现了一个奇怪的bug&#xff1a;双击xlsx文件&#xff0c;只能打开Excel窗口&#xff0c;但是打不开这个文件&#xff0c;有时候再次双击就能打开了&#xff0c;但有时再次双击也不管用&#xff0c;需要在Excel的菜单中点“…

gmssl使用双证书双向认证的gmtl协议报错crypto/sm2/sm2_sign.c 510: sm2_do_verifySSL3 alert write:fatal:decrypt error

报错内容 crypto/sm2/sm2_sign.c 510: sm2_do_verify SSL3 alert write:fatal:decrypt error SSL_accept:error in error ERROR 140655864152064:error:1417B07B:SSL routines:tls_process_cert_verify:bad signature:ssl/statem/statem_srvr.c:2941: 相关内容 版本&#xf…

纠偏的意思_承压能力和纠偏能力,决定成长的高度

承压能力&#xff0c;包含抗压能力、抵御能力&#xff0c;担当能力&#xff0c;分解能力&#xff0c;消化能力&#xff0c;释放能力&#xff0c;等一系列的精神要素&#xff0c;是一个人生存生活工作中一项重要的素质。有的人&#xff0c;承压能力很强&#xff0c;无论经受什么…

《Java8实战》笔记(15):面向对象和函数式编程的混合-Java 8和Scala的比较

面向对象和函数式编程的混合&#xff1a;Java 8和Scala的比较 Scala是一种混合了面向对象和函数式编程的语言。它常常被看作Java的一种替代语言&#xff0c;程序员们希望在运行于JVM上的静态类型语言中使用函数式特性&#xff0c;同时又期望保持Java体验的一致性。和Java比较起…

函数指针作为形参进行调用

代码 两个代码均位于namespace作用域之内addOne将传递进来的形参进行加一&#xff0c;然后返回performance_test函数主要是想简化函数调用&#xff0c;两个形参&#xff0c;第一个表示循环的次数&#xff0c;第二个是带参数的函数指针&#xff0c;函数内部初始化start和end两个…

python中fetchall_Python连接MySQL并使用fetchall()方法过滤特殊字符

来一个简单的例子&#xff0c;看Python如何操作数据库&#xff0c;相比Java的JDBC来说&#xff0c;确实非常简单&#xff0c;省去了很多复杂的重复工作&#xff0c;只关心数据的获取与操作。准备工作需要有相应的环境和模块&#xff1a;Ubuntu 14.04 64bitPython 2.7.6MySQLdb注…

《Java8实战》笔记(16):结论以及Java的未来

结论以及Java的未来 回顾Java8的语言特性 行为参数化&#xff08;Lambda以及方法引用&#xff09; 流 CompletableFuture Optional 默认方法 Java的未来 集合 类型系统的改进 声明位置变量 更多的类型推断 模式匹配 更加丰富的泛型形式 具化泛型 泛型中特别为函…

解决吉大正源(身份认证网关|USBKey)和gmssl(server|client)使用gmtl协议交叉互通报错tlsv1 alert decrypt error

报错内容 SSL_connect:error in SSLv3/TLS write finished140057291788288:error:1409441B:SSL routines:ssl3_read_bytes:tlsv1 alert decrypt error:ssl/record/rec_layer_s3.c:1385:SSL alert number 51 报错原因 gmssl库生成 certificate verify 消息时&#xff0c;对自客…