SSL/TLS
时间:2021-07-13
本文章向大家介绍SSL/TLS,主要包括SSL/TLS使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
SSL/TLS
SSL/TLS的工作
- Alice的信用卡号和地址在发送到Bob书店的过程中不能被窃听(保密性)——对称密码、Diffie-Hellman密钥交换
- Alice的信用卡号和地址在发送到Bob书店的过程中不能被篡改(完整性)——消息认证码
- 确认通信对方的web服务器是真正的Bob书店(身份认证)——数字签名
SSL/TLS可以保护其他协议
密码套件
SSl/TLS提供了一种密码通信的框架,这意味着SSL/TLS中使用的对称密码、公钥密码、数字签名、单向散列函数等技术,都可以像零件一样被替换。
SSL和TLS的区别
- SSL(Secure Socket Layer,安全套接层)SSL3.0已经不安全了
- TLS(Transport Layer Secure,传输层安全)在SSL3.0基础上设计的,目前使用TLS1.1和TLS1.2,其中TLS1.2新增对GCM、CCM认证加密的支持,此外还新增了HMAC-SHA256,并删除了IDEA和DES,将伪随机函数(PRF)改为基于SHA-256来实现
使用SSL/TLS进行通信
层次化的协议
TLS协议是由TLS记录协议和TLS握手协议两层协议叠加而成的
- TLS记录协议(TLS record protocol)负责进行加密
- 使用了对称密码和消息认证码
- 消息被分割成多个较短的片段,对每个片段进行压缩
- 对经过压缩的数据加上消息认证码,保证完整性,对数据进行认证。通过附加消息认证码的MAC值,可以识别篡改。为了防止重放攻击,在计算消息认证码是,还加上了片段的编号。单向散列函数的算法,以及消息认证码所使用的共享密钥都需要与通信对象协商决定
- 经过压缩的片段再加上消息认证码会一起通过对称密码进行加密。加密使用CBC模式,CBC模式的初始化向量(IV)通过主密码(master secret)生成,而对称密码的算法以及共享密钥需要与通信对象协商决定
- 上述经过加密的数据再加上数据类型。版本号、压缩后的长度组成的报头就是最终的报文数据。其中,数据类型为TLS记录协议所承载的四个子协议的其中之一
- 使用了对称密码和消息认证码
- TLS握手协议(TLS handshake protocol)负责除加密意外的其他各种操作
- 握手协议
- 决定算法和共享密钥
- 密码规格变更协议
- 传达改变密码的信号
- 警告协议
- 传达错误
- 应用数据协议
- 将TLS上承载的应用数据传达给通信对象的协议
- 握手协议
握手协议
- ClientHello(客户端->服务器)
- 可用的版本号
- 当前时间
- 客户端随机数
- 会话ID
- 可用的密码套件清单
- 可用的压缩方式清单
- SeverHello(客户端<-服务器)
- 使用的版本号
- 当前时间
- 服务器随机数
- 会话ID
- 使用的密码套件
- 使用的压缩方式
- Certificate(客户端<-服务器)
- 证书清单
- SeverKeyExchange(客户端<-服务器)
- CertificateRequest(客户端<-服务器)
- 服务器能够理解的证书类型清单
- 服务器能够理解的认证机构名称清单
- SeverHelloDone(客户端<-服务器)
- Certificate(客户端->服务器)
- ClientKeyExchange(客户端->服务器)
- 对称密码的密钥
- 消息认证码的密码
- 对称密码的CBC模式中使用的初始化向量IV
- CertificateVerify(客户端->服务器)
- ChangeCipherSpec(客户端->服务器)
- Finished(客户端->服务器)
- ChangeCipherSpec(客户端<-服务器)
- Finished(客户端<-服务器)
- 切换至应用数据协议
- 客户端获得了服务器的合法公钥,完成了服务器认证
- 服务器获得了客户端的合法公钥,完成了客户端认证(当需要客户端认证时)
- 客户端和服务器生成了密码通信中使用的共享密钥
- 客户端和服务器生成了消息认证码中使用的共享密钥
主密码
主密码是TLS客户端和服务器之间协商出来的一个秘密的数值。这个数值非常重要,TLS密码通信的机密性和数据的认证全部依靠这个数值。主密码是一个48bytes(384bits)的数值。
- 主密码的计算
- 预备主密码
- 客户端随机数
- 服务器随机数
- 主密码的目的
- 对称密码的密钥(客户端->服务器)
- 对称密码的密钥(客户端<-服务器)
- 消息认证码的密钥(客户端->服务器)
- 消息认证码的密钥(客户端<-服务器)
- 对称密码的CBC模式所使用的初始化向量(客户端->服务器)
- 对称密码的CBC模式所使用的初始化向量(客户端<-服务器)
TLS中使用的密码技术小结
对SSl/TLS的攻击
- 对各个密码技术的攻击
- OpenSSL的心脏出血漏洞
- SSL3.0的漏洞与POODLE攻击
- FREAK攻击与密码产品出口管制
- 对伪随机数生成器的攻击
- 利用证书的时间差进行攻击
原文地址:https://www.cnblogs.com/wj99/p/15007201.html
- (32) 剖析日期和时间 / 计算机程序的思维逻辑
- Python开发微信公众号后台(系列三)
- 【新手向】为何要这样安装Django?
- (33) Joda-Time / 计算机程序的思维逻辑
- Python实现守护进程
- 初探Anaconda——最省心的Python版本和第三方库管理
- Linux环境下JDK/Eclipse一键安装脚本
- (31) 剖析Arrays / 计算机程序的思维逻辑
- 应用自然语言处理(NLP)解码电影
- 不引入新的数组,实现数组元素交换位置函数
- (30) 剖析StringBuilder / 计算机程序的思维逻辑
- Java初始化顺序
- ConcurrentHashMap使用示例
- (40) 剖析HashMap / 计算机程序的思维逻辑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- R语言在不同样本量下的Littles MCAR检验
- Stata中的治疗效果:RA:回归调整、 IPW:逆概率加权、 IPWRA、 AIPW
- R语言基于协方差的SEM结构方程模型中的拟合指数
- Python贝叶斯回归分析住房负担能力数据集
- 基于R统计软件的三次样条和平滑样条模型数据拟合及预测
- R语言析因设计分析:线性模型中的对比
- R语言逻辑回归、方差分析 、伪R平方分析
- R语言逐步多元回归模型分析长鼻鱼密度影响因素
- R语言对回归模型进行协方差分析
- R语言多项式样条回归、非线性回归数据分析
- R语言中进行Spearman等级相关分析
- R语言相关分析和稳健线性回归分析
- R语言文本挖掘使用tf-idf描述NASA元数据的文字和关键字
- R语言对NASA元数据进行文本挖掘的主题建模分析
- 随机搜索变量选择SSVS估计贝叶斯向量自回归(BVAR)模型