TLS协议分析 (二) 架构总览

解密TLS协议全记录之利用wireshark解密 引言 为什么会突然有使用wireshark学习TLS的想法,主要是为了在nike官网抢限量球鞋,但是发现路子好像走歪了,唯一的价值好像就是多了这么一篇博客,查阅了很多有根据,没根据的博客内容,总结出这篇自以为还算全面,结实的文章。如有问题,欢迎讨论交流。 学习网络协议之前,必须先找对最基本的协议学习网站, rfc协议官网 https://www.rfc-editor.org ietf协议官网 https://www.ietf.org/ 这个网站我经常搜索不出比较理想的文件,标题不直观,杂七杂八的会议记录 阅读详情

二. TLS协议的原理

1. 自顶向下,分层抽象

构建软件的常用方式是分层,把问题域抽象为多层,每一层的概念定义为一组原语,上一层利用下一层的组件构造实现,并被上一层使用,层层叠叠即成软件。

  • 例如在编程语言领域中,汇编语言为一层,在汇编上面是C/C++等静态编译语言,C/C++之上是python/php/lua等动态类型脚本语言层,之上常常还会构造领域特定的DSL
  • 在网络架构中,以太网是一层,其上是ip协议的网络层,ip之上是tcp等传输层,tcp之上是http等应用层

密码学通信协议也是分层构造得到。大致可以这么分层:

  1. 最底层是基础算法原语的实现,例如: aes , rsa, md5, sha256,ecdsa, ecdh 等(举的例子都是目前的主流选择,下同)
  2. 其上是选定参数后,符合密码学里标准分类的算法,包括块加密算法,签名算法,非对称加密算法,MAC算法等,例如: aes-128-cbc-pkcs7,rsaes-oaep ,rsassa-pkcs1-v1_5, hmac-sha256,ecdsa-p256,curve25519 等
  3. 再其上,是把多种标准算法组合而成的半成品组件,例如:对称传输组件例如 aes-128-cbc + hmac-sha256,aes-128-gcm,认证密钥协商算法: rsassa-OAEP + ecdh-secp256r1,数字信封:rsaes-oaep + aes-cbc-128 + hmac-sha256 ,文件密码加密存储组件:pbkdf2+aes-128-cbc-hmac-sha256,密钥扩展算法 PRF-sha256 等
  4. 再其上,是用各种组件拼装而成的各种成品密码学协议/软件,例如:tls协议,ssh协议,srp协议,gnupg文件格式,iMessage协议,bitcoin协议等等

第1层,一般程序员都有所了解,例如rsa,简直路人皆知; md5 被广泛使用(当然,也有广泛的误用)
第2层,各种莫名其妙的参数,一般很让程序员摸不着头脑,需要深入学习才能理清。
第3层,很多程序员自己造的轮子,往往说白了就是想重复实现第3层的某个组件而已。
第4层,正确地理解,使用,部署这类成熟的开放协议,并不是那么容易。很多的误用来源于不理解,需要密码学背景知识,才能搞懂是什么,为什么,怎么用。

最难的是理论联系实际。面对一个一团乱麻的实际业务问题,最难的是从中抽象分析出其本质密码学问题,然后用密码学概念体系给业务建模。在分析建模过程中,要求必须有严密的,体系化的思考方式。不体系化的思考方式会导致疏漏,或者误用。

第2层中,密码学算法,常见的有下面几类:

  1. 块加密算法 block cipher: AES, Serpent, 等
  2. 流加密算法 stream cipher: RC4,ChaCha20 等
  3. Hash函数 hash funtion:MD5,sha1,sha256,sha512 , ripemd 160,poly1305 等
  4. 消息验证码函数 message authentication code: HMAC-sha256,AEAD 等
  5. 密钥交换 key exchange: DH,ECDH,RSA,PFS方式的(DHE,ECDHE)等
  6. 公钥加密 public-key encryption: RSA,rabin-williams 等
  7. 数字签名算法 signature algorithm:RSA,DSA,ECDSA (secp256r1 , ed25519) 等
  8. 密码衍生函数 key derivation function: TLS-12-PRF(SHA-256) , bcrypto,scrypto,pbkdf2 等
  9. 随机数生成器 random number generators: /dev/urandom 等

每个类别里面的都有几个算法不断竞争,优胜劣汰,近几十年不断有老的算法被攻破被淘汰,新的算法被提出被推广。这一块话题广,水很深,内容多,陷阱也多,后续byron会翻译整理一系列文章,分享一下每一类里面个人收集的资料。
在此推荐一下 [ 开源电子书crypto101] 链接 https://www.crypto101.io/ ,讲的很透彻,而且很易读)

设计一个加密通信协议的过程,就是自顶向下,逐步细化,挑选各类组件,拼装成完整协议的过程

2. TLS CipherSuite

从上述分层的角度看,TLS大致是由3个组件拼成的:

  • 1.对称加密传输组件,例如aes-128-gcm(这几个例子都是当前2015年最主流的选择);
  • 2.认证密钥协商组件,例如rsa-ecdhe;
  • 3.密钥扩展组件,例如TLS-PRF-sha256

这些组件可以再拆分为5类算法,在TLS中,这5类算法组合在一起,称为一个CipherSuite:

  1. authentication (认证算法)
  2. encryption (加密算法 )
  3. message authentication code (消息认证码算法 简称MAC)
  4. key exchange (密钥交换算法)
  5. key derivation function (密钥衍生算法)

TLS协议设计之初就考虑到了这每一类算法的演变,所以没有定死算法,而是设计了一个算法协商过程,来允许加入新的算法( 简直是软件可扩展性设计的典范!),协商出的一个算法组合即一个CipherSuite
TLS CipherSuite 在 iana 集中注册,每一个CipherSuite分配有 一个2字节的数字用来标识 ,可以在 [iana的注册页面] 链接 https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-4 查看

iana注册页面截图:
图片

在浏览器中,就可以查看当前使用了什么 CipherSuite,在地址栏上,点击一个小锁的标志,就可以看到了。
图片

服务器端支持的CipherSuite列表,如果是用的openssl,可以用 openssl ciphers -V | column -t 命令查看,输出如:
图片

例如其中这一行(这个是目前的主流配置):

0xC0,0x2F  -  ECDHE-RSA-AES128-GCM-SHA256    TLSv1.2  Kx=ECDH        Au=RSA    Enc=AESGCM(128)    Mac=AEAD

表示:
名字为ECDHE-RSA-AES128-GCM-SHA256 的CipherSuite ,用于 TLSv1.2版本,使用 ECDHE 做密钥交换,使用RSA做认证,使用AES-128-gcm做加密算法,MAC由于gcm作为一种aead模式并不需要,所以显示为aead,使用SHA256做PRF算法。

可以参考 [man 1 ciphers] 链接 http://linux.die.net/man/1/ciphers

要注意的是,由于历史兼容原因,tls标准,和openssl的tls实现中,有一些极度不安全的CipherSuite,一定要禁用,比如:

  • EXP , EXPORT
    一定要禁用。EXPORT表示上世纪美国出口限制弱化过的算法,早已经被攻破,TLS的FREAK 攻击就是利用了这类坑爹的算法。
  • eNULL, NULL
    一定要禁用。NULL表示不加密!默认是禁用的。
  • aNULL
    一定要禁用。表示不做认证(authentication) ,也就是说可以随意做中间人攻击。
  • ADH
    一定要禁用。表示不做认证的 DH 密钥协商。

上面是举个例子,读者不要自己去研究怎么配置,这太容易搞错。
请按照mozilla官方给出的这个[权威文档] 链接 https://wiki.mozilla.org/Security/Server_Side_TLS#Recommended_configurations ,复制粘贴就好了。

CipherSuite的更多解释,配置方法等,可以参考byron之前写的一篇文章 [SSL/TLS CipherSuite 介绍] https://blog.helong.info/blog/2015/01/23/ssl_tls_ciphersuite_intro/

3. 协议分层

TLS是用来做加密数据传输的,因此它的主体当然是一个对称加密传输组件。为了给这个组件生成双方共享的密钥,因此就需要先搞一个认证密钥协商组件,故,TLS协议自然分为:

  1. 做对称加密传输的record协议 ,the record protocol
  2. 做认证密钥协商的handshake协议,the handshake protocol

还有3个很简单的辅助协议:

  1. changecipher spec 协议,the changecipher spec protocol, 用来通知对端从handshake切换到record协议(有点冗余,在TLS1.3里面已经被删掉了)
  2. alert协议,the alert protocol, 用来通知各种返回码,
  3. application data协议, The application data protocol,就是把http,smtp等的数据流传入record层做处理并传输。

这种 认证密钥协商 + 对称加密传输 的结构,是绝大多数加密通信协议的通用结构,在后文的更多协议案例中,我们可以看到该结构一再出现。

这5个协议中:
record协议在tcp流上提供分包,
图片来自网络:
图片

其它的: handshake protocol, alert protocol, changeCipherSpec protocol, application data protocol都封装在record protocol的包里,然后在tcp上传输(此处以tcp举例,也有可能是udp,或者随便什么ipc机制等)

下文分别介绍,内容主要是翻译自 RFC5246,RFC5077,RFC4492

​ 本文转自微信后台团队,如有侵犯,请联系我们立即删除

OpenIMgithub开源地址:

https://github.com/OpenIMSDK/Open-IM-Server

OpenIM官网 : https://www.rentsoft.cn

**OpenIM官方论坛: **https://forum.rentsoft.cn/

更多技术文章:

开源OpenIM:高性能、可伸缩、易扩展的即时通讯架构
https://forum.rentsoft.cn/thread/3

【OpenIM原创】简单轻松入门 一文讲解WebRTC实现1对1音视频通信原理
https://forum.rentsoft.cn/thread/4

【OpenIM原创】开源OpenIM:轻量、高效、实时、可靠、低成本的消息模型
https://forum.rentsoft.cn/thread/1

TLS协议详解 万字详解TLS协议,以及如何优化Https 阅读详情

相关推荐

传输层安全(TLS)笔记

一.什么是TLS TLS(Transport Layer Security,安全传输层),TLS是建立在传输层TCP协议之上的协议,服务于应用层,它的前身是SSL(Secure Socket Layer,安全套接字层),它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。 ...

weixin_43586667的博客 1万+

SSL/TLS介绍以及wireshark抓包TLS Handshake报文

SSL/TLS是在应用层和传输层之间的一个安全协议,通信的双方在进行通信前需要握手,通过在通信的两端建立一个安全的通道,保护数据在传输过程中的安全性。Session Identifier 的优点是它很简单,但它的缺点是,如果服务器重新启动或者会话超时,之前的Session Identifier就会失效,需要重新建立会话。Session Ticket 的优点是它可以在服务器重启后仍然保持会话的有效性,但需要确保会话票据的安全性,以防止被恶意利用。因为这是一次单向认证的Handshake过程,故比较简单。

weixin_52018852的博客 7000

wireshark分析TLS协议

wireshark分析TLS协议 一.tls协议介绍 SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议 安全传输层协议(TLS)用于在两个通信应用程序之间提供保密性和数据完整...

qq_38240926的博客 6521

HTTPS工作原理及报文讲解

1 HTTPS 1.1 HTTPS简介 HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议,是一个安全通信通道,它基于HTTP开发用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版,是使用TLS/SSL加密的HTTP协议。 SSL (Secure Sockets Layer)安全套接层。是由Netscape公司于1990年开发,用于保障Word Wide Web(WWW)通讯的安全。主要任务..

echo 1万+

使用Wireshark抓包分析TLS协议

TLS(Transport Layer Security,传输层安全)是一种用于保护网络通信安全的协议。它建立在SSL(Secure Sockets Layer,安全套接层)协议之上,用于在客户端和服务器之间创建加密连接,确保通信的保密性、完整性和认证性。

m0_65890285的博客 7097

TLS抓包分析

TLS(Transport Layer Security, 传输层安全):用于保证Web通信以及其他流行协议的安全。 TLS的前身是安全套接字层(SSL)。 TLSv1.2版本运行在面向流的协议(如TCP)之上。 记录协议提供分片、压缩、完整性保护以及对客户端与服务器之间所交换数据的加密服务。 信息交换协议负责建立身份,进行认证,提示警报,以及为用于每一条连接的记录协议提供唯一的密钥材料。 TL...

神童i的博客 7332

用wireshark抓包分析TLS协议

一、SSL/TLS简介 1、协议介绍 SSL/TLS是保护计算机网络通讯安全的一类加密协议,它们在传输层上给原先非安全的应用层协议提供加密保护,如非安全的HTTP协议即可被SSL/TLS保护形成安全的HTTPS协议。 SSL、TLS协议其实是有所差异的,TLS协议是继承了SSL协议并写入RFC,标准化后的产物。因此,通常使用SSL来指代SSL协议和TLS协议。 SSL (Secure Socket Layer)安全套接字层协议 • SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客

m0_50084718的博客 2万+

TLS握手流程分析

客户端发送:用于初始化会话消息,该消息主要包含如下信息:: 客户端发送它所支持的最高 SSL/TLS 版本;:一个 32 字节的客户端随机数,该随机数被服务端生成通信用的对称密钥(master secret);:session ID 被客户端用于恢复之前的会话: 客户端发送它所支持的加密套件列表服务端发送:服务端发送双方所支持的最高的 SSL/TLS 版本;:一个 32 字节的服务端随机数,被客户端用于生成通信用的对称密钥(master secret);:用于会话恢复;

weixin_43894455的博客 4341

解密TLS协议全记录之TLS协议剖析记录

引言 想要解密TLS的首当其冲的点,便是要深入了解TLS中的RFC协议文档。

walleva96的博客 1万+

TLS握手过程及wireshark抓包分析

TLS握手过程及wireshark抓包分析 1.TLS的发展 1994年,NetScape公司设计了SSL协议(Secure Sockets Layer)的1.0版,但是未发布。 1995年,NetScape公司发布SSL 2.0版,很快发现有严重漏洞。 1996年,SSL 3.0版问世,得到大规模应用。 1999年,互联网标准化组织ISOC接替NetScape公司,发布了SSL的升级版TLS 1.0版。 2006年和2008年,TLS进行了两次升级,分别为TLS 1.1版和TLS 1.2版。最新的变动是2

weixin_46775266的博客 4021

TLS协议分析------

TLS协议分析 2015-09-06 本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解,建议花精力补足背景知识再读。本文最后的参考文献里有一些很不错的学习资料。 目录 : 1 2 3 4 5 6 7

zhangliang_571的专栏 1万+

TLS协议分析

一、实验目的 1.本次实验主要目的是分析访问网站时捕捉TLS包,并且对TLS协议进行分析。 2.分析连接建立的完整过程,如:TCP三次握手、SSL安全连接,使用TLS协议连接、协商过程,加密传送的状态、TCP挥手等。 3.查看TLS报文的完整字段,并且分析字段的意义。 二、实验准备 1.系统:win10 软件:wiresharke 2.了解基本的TLS协议,以及其工作流程 三、实验原理 ...

dixunzhong8774的博客 1036

【网络协议】【SSL/TLS】精讲SSL/TLS概念和报文结构,图解超赞超详细!!!

​ 1. 欢迎大家订阅和关注:精讲网络通信协议(OSI、TCP、IP、UDP、ARP、ICMP、DHCP、HTTP、MQTT、SSL等)知识点,专栏会持续更新中.....敬请期待!

风云说通信 1441

TLS协议详解!

TLS简介 SSL 即安全套接字层,它在 OSI 七层网络模型中处于第五层,SSL 在 1999 年被 IETF(互联网工程组)更名为 TLS ,即传输安全层,直到现在,TLS 一共出现过三个版本,1.1、1.2 和 1.3 ,目前最广泛使用的是 1.2,所以接下来的探讨都是基于 TLS 1.2 的版本上的。 TLS1.2 和 TLS 1.3 的区别 在 TLS 1.2 的握手中,一般是需要 4 次握手,先要通过 Client Hello (第 1 次握手)和 Server Hello(第 2 次握手) 消

weixin_46622350的博客 3万+

SpringBoot整合oceanbase,实现oracle无缝切换到oceanbase

随着去“IOE”化的潮流,近些年来,许多与国家相关的项目不约而同到地往”国产化“方向靠拢,不可避免地,一些项目可能需要进行数据库迁移。

4622

VS Code配置MinGW64编译非线性优化库NLopt

VS Code用MinGW64编译C++代码安装MSYS2软件并配置非线性优化库NLopt和测试引用库代码的完整具体步骤。:若使用非UCRT版本(如传统MinGW64),替换所有路径中的。库文件会自动安装到MSYS2的。

weixin_30777913的博客 902

wireshark抓包分析SSL/TLS协议

SSL/TLS协议一般有两种握手过程,一种是SSL握手,一种是会话恢复。前些时候在写HTTP和HTTPS协议区别的时候介绍了SSL协议的相关理论知识,但多少还是有点抽象,今天我们可以通过wireshark抓包来分析下SSL握手的过程。 一、正常的握手过程 (一)过程如下 (二)wireshark抓到的对应的包如下 (三)具体的包分析 Client Hello 包中...

Alexwym的博客 9263

深入浅出PWM:用示波器带你理解占空比与滤波效果

本文通过示波器实测,深入浅出地解析了PWM(脉宽调制)的核心原理。从占空比与平均电压的关系入手,详细演示了RC及有源滤波器如何将数字方波“翻译”为平滑模拟电压,并探讨了PWM-DAC的精度、响应速度等关键设计考量,为硬件调试与电路设计提供了实用的实践指导。

weixin_29292431的博客 344

TLS协议分析 与 现代加密通信协议设计

本文目标: 学习鉴赏TLS协议的设计,透彻理解原理和重点细节 跟进一下密码学应用领域的历史和进展 整理现代加密通信协议设计的一般思路 本文有门槛,读者需要对现代密码学有清晰而系统的理解,建议花精力补足背景知识再读。本文最后的参考文献里有一些很不错的学习资料。 目录 : TLS协议分析 与 现代加密通信协议设计 一. TLS协议的设计目标: 1.1 密码学的方法论 1....

yetugeng的专栏 7438

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 735

接地设计的本质:按电流类型选择物理连接方式

接地是电子系统中实现电位参考、噪声抑制与安全保护的基础技术,其核心原理在于为不同性质的电流提供可控的低阻抗返回路径。从直流到GHz频段,电流的频率特性、能量等级和持续时间决定了接地的物理实现方式——工频安全电流依赖低电阻导体,高频噪声需低感平面或磁珠衰减,ESD脉冲要求受控泄放电阻,浪涌能量则必须通过独立短路径导入大地。这种‘目的决定方式’的设计逻辑,直接关联EMC合规性、信号完整性与系统可靠性。本文聚焦PCB级与设备级工程实践,详解安全地、功能地、浪涌地与静电地的判据差异及六种典型连接策略,帮助硬件工程师

weixin_36369848的博客 258

SSL/TLS协议交互流程分析

本文参考SSL/TLS协议运行机制的概述tls运行机制,这里不细说,建议细看HTTPS与TLSThe Transport Layer Security (TLS) Protocol v1.2ssl/tls基础介绍SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议

rtmdk的博客 2万+

RK3588适配Ubuntu系统

RKsdk上支持buildroot以及Debian系统,但是Ubuntu需要自己移植,有很多公司都移植好了可以直接用,这里就总结记录一下我制作Ubuntu的过程。

m0_60805802的博客 5360
上一篇: TLS协议分析 (一) 设计目标及历史
下一篇: TLS协议分析 (三) record协议
OpenIM
博客等级 码龄5年 295粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值