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)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...
随机推荐
- Python Spider - urllib.request
import urllib.request import urllib.parse import json proxy_support = urllib.request.ProxyHandler({' ...
- 关于String的一些基础小题目
需求一:从键盘输入一串字符串,统计数字,字母,空格,其它字符的个数 import java.util.Scanner; public class Q1 { public static void mai ...
- python调试之pdb
一.PDB调试命令 pdb调试命令 完整命令 简写命令 描述 args a 列出当前函数的参数 break b <行号> 在某一行设置断点 break b <文件名>:< ...
- SPOJ DIVCNT2
SPOJ DIVCNT2 题目大意: 求\(S2(n)=\sum_{i=1}^{n}\sigma_0{(i^2)}\) . 题解 我们可以先考虑括号里只有一个\(i\)的情况,这样,我们把\(i\)分 ...
- linux date -s
修改linux的时间可以使用date指令 修改日期: 时间设定成2009年5月10日的命令如下: #date -s 05/10/2009 修改时间: 将系统时间设定成上午10点18分0秒的命令如下. ...
- CF451E Devu and Flowers
多重集求组合数,注意到\(n = 20\)所以可以用\(2 ^ n * n\)的容斥来写. 如果没有限制那么答案就是\(C(n + s - 1, n - 1)\).对每一个限制依次考虑,加上有一种选多 ...
- python2 配置环境变量
复习 '''重点:1.进制转换:二进制 与 十六进制2.内存分布:栈区 与 堆区 # 124810101001110111 => 2a77abf1 => 1010101111110001 ...
- 06--STL序列容器(priority_queue)
一:优先队列priority_queue简介 同队列,不支持迭代 (一)和队列相比 同: 优先队列容器与队列一样,只能从队尾插入元素,从队首删除元素. 异: 但是它有一个特性,就是队列中最大的元素总是 ...
- 第十二节:WebApi自动生成在线Api文档的两种方式
一. WebApi自带生成api文档 1. 说明 通过观察,发现WebApi项目中Area文件夹下有一个HelpPage文件夹,如下图,该文件夹就是WebApi自带的生成Api的方式,如果该文件夹没了 ...
- redis---------AOF文件异常导致的redis无法载入
AOF损坏时的对策1.若在写AOF文件时Server崩溃则可能导致AOF文件损坏而不能被Redis载入.可通过如下步骤修复: 创建一个AOF文件的备份: cp appendonly.aof appen ...