TLS详解
TLS加密通信,
开始使用协商的秘钥进行加密通信
1、服务器也可以要求验证客户端,即实现双向的验证,
2、会话缓存握手过程,为了建立握手的速度,减少协议带来的性能方面的降低和资源方面的消耗,TLS协议有两类会话缓存机制,分别是会话session ID 和会话记录session titcket 。
Session ID有服务器端支持,协议中的标准字段,因此基本的所有服务都支持,服务区段保存会话 ID 以及协商的通信信息, Nginx中的IM内存约保存4000个session ID机器相关的信息,占服务器资源较多。 另一种就是Session ticket需要服务器和客户端都支持,术语一个扩展字段,将协商的通信信息加密之后发送给客户端保存,秘钥只有服务器知道,占用服务器的资源最少。这两者对比,主要是保存协商信息位置的不同,类似http中session与从cookie。二者都存在的情况下,(nginx实现)优先使用session_ticket
握手过程如下:
(1)会话标识SessionID
如果客户端和服务器之间之前建立了连接,服务器会在握手成功之后返回SessionID ,并且保存默认的参数在服务器中
如果客户端再次需要和该服务器建立连接,则在Client_hello中 session_id中携带记录信息,发送给服务器。
服务器根据收到的session Id 检索缓存的记录,如果没有检索到缓存过期,则按照正常的握手进程进行。
如果检索到对应点缓存激励,则返回change_cipher_spec与 encrypted_handshake_message信息,两个信息作用类似,encrypted_handshack_messag是到当前通信参数与 master_sercet的hash值。但是如果客户能够验证通过服务器加密数据,则客户端同样发送change_spec和encrypted_handshake_message信息。服务器验证数据通过,则握手建立连接成功,开始进行征程的数据加密通信。
(2)会话记录session_ticket
如果客户端和服务器支架之前建立可连接,服务器会在new_session_ticket数据中携带加密的session_ticket信息,客户端保存。
如果客户端再次需要和服务器建立连接,则在client_hello 中扩展字段session_ticket中携带加密信息,一起发送给服务器,服务器解密session_ticket数据,如果解密失败按照正常的握手进行。
如果解密成功,session-ticket则返回 change_cipher_spec和encrypted_handshake_message信息,两个信息作用于session Id中类似。
如果客户端能工验证通过服务器加密数据,则客户端同样发送change_cipher_spec和encrypted_handshake_message信息。
服务器验证数据通过,则我哦手建立成功,开始进行正常的数据加密通信。
3、重新连接
重新建立连接,就是放弃之前建立的连接,(TLS连接) 从新进行身份认证和秘钥写上个的过程,特点是不需要断开当前的数据传输就可以重新身份认证,更新秘钥和算法,因此服务端存储和缓存的信息都可以保存,
服务器端重新建立一般情况是客户端访问受保护的数据发生,基本过程如下:
客户端和服务端建立了有效TLS连接 ,并开始通信。
客户端访问受保护的信息
服务器端返回helo-request信息
客户端收到hello_request 信息之后发送client-helo 信息,开始建立连接
(4)秘钥计算
涉及的参数 random client random_server Pre_master Master sercet key material 计算秘钥时,服务器和客户端都具体有这些基本的信息 ,计算流程如下:
客户端使用RSA或者Diffe-Hellman等加密算法生成Pre-Master
Pre-Master结合Random sercet 和Random-server 两个随机数进行迭代生成 ker material 下面是详细的内容解释:
PreMaster sercet 前面两个字节是TLS的版本号,这是一个比较重要的用来核对握手数据的版本号,因为在 Client hello 阶段,客户端会发送一份加密套件列表和当前支持的TLS协议的版本号给服务端 ,而且使用的是明文传输,如果握手数据包被破解之后,攻击者很可能篡改数据包,选择一个安全性较低的加密套件和版本给服务端,从而对数据进行破解,所以服务端要对密文中解密出来的对 PerMaster 版本号跟之前的Client hello阶段版本号进行对比, 如果版本号变低,则说明数据被篡改,则立即日内至发送任何消息。
不管是客户端还是服务器端都要使用随机数,这样生成的随机秘钥每次都会不一样,对于RAS秘钥来说,pre-master-key 本身就是一个随机数,再加上helo消息中的随随机数三个随机数通过一个秘钥导出器最终生成一个对称秘钥。一个伪随机可能不完全是伪随机,但是三个伪随机加起来可能十分接近伪随机数,
TLS详解的更多相关文章
- SSL/TLS 原理详解
本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...
- HTTPS 传输优化详解之动态 TLS Record Size
笔者在过去分析了诸多可以减少 HTTPS 传输延迟的方法,如分布式 Session 的复用: 启用 HSTS,客户端默认开启 HTTPS 跳转:采用 HTTP/2 传输协议:使用 ChaCha20-P ...
- SSL/TLS 握手过程详解
在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...
- [No0000126]SSL/TLS原理详解与WCF中的WS-Security
SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...
- HTTPS详解二:SSL / TLS 工作原理和详细握手过程
HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...
- 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)
继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...
- SSL/TLS协议详解(下)——TLS握手协议
本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...
- SSL/TLS协议详解(中)——证书颁发机构
本文转载自SSL/TLS协议详解(中)--证书颁发机构 导语 上一篇中,我们讨论了关于Diffie Hellman算法的SSL/TLS密钥交换.我们最终认为需要第三方来验证服务器的真实性,并提出了证书 ...
- SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法
本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...
随机推荐
- springdata 动态查询之排序
- 阿里云配置安全组(配置入口port)
访问:www.aliyun.com 登录后,左上角点击: 点击[云服务器] 点击右下角[配置规则] 入口 出口
- spring的DI.IoC是什么
最近要搞spring的单元测试,不得已啊啊啊啊啊啊啊啊啊又要开始搞spring…… 日目晶…… 搞这几个概念,先甩一部分代码: UserDao 接口 package com.itheima.ioc; ...
- SQL随记(六)
1.关于dbms_sql包的一些执行语句 cursor_name := DBMS_SQL.OPEN_CURSOR; --打开游标: DBMS_SQL.PARSE(cursor_name, var_dd ...
- C++: 模板函数定义与声明分离;
我们知道模板函数或模板类的定义一般都是和声明一起在头文件中,但是这样的话, 就暴露了内部实现,有什么办法能够将定义和声明进行分离呢? 答案是: 有的: 头文件: test.h; class test ...
- kubernetes 核心技术概念(二)之 volume namespace annoation
volume k8s通过数据卷来提供pod数据的持久化,k8s的数据卷是对docker数据卷的扩展,k8s的数据卷是pod级别的,用来实现pod中容器的文件共享 volume是pod中能被多个容器访问 ...
- kubernetes包管理工具Helm安装
helm官方建议使用tls,首先生成证书. openssl genrsa -out ca.key.pem openssl req -key ca.key.pem -new -x509 -days -s ...
- VS注释快捷键
注释: 先CTRL+K,然后CTRL+C 取消注释: 先CTRL+K,然后CTRL+U 代码自动对齐:1, ctrl+a 2, ctrl+k 3, ctrl+f
- 转载skbbuf整理笔记
1.http://blog.csdn.net/yuzhihui_no1/article/details/38666589 2.http://blog.csdn.net/yuzhihui_no1/art ...
- 蓝桥杯入门训练-Fibonacci数列
刚刚开始刷题的时候就栽了个大跟头,稍微记一下...... 一开始不是很理解:“我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数 ...