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详解的更多相关文章

  1. SSL/TLS 原理详解

    本文大部分整理自网络,相关文章请见文后参考. SSL/TLS作为一种互联网安全加密技术,原理较为复杂,枯燥而无味,我也是试图理解之后重新整理,尽量做到层次清晰.正文开始. 1. SSL/TLS概览 1 ...

  2. HTTPS 传输优化详解之动态 TLS Record Size

    笔者在过去分析了诸多可以减少 HTTPS 传输延迟的方法,如分布式 Session 的复用: 启用 HSTS,客户端默认开启 HTTPS 跳转:采用 HTTP/2 传输协议:使用 ChaCha20-P ...

  3. SSL/TLS 握手过程详解

    在现代社会,互联网已经渗透到人们日常生活的方方面面,娱乐.经济.社会关系等都离不开互联网的帮助.在这个背景下,互联网安全就显得十分重要,没有提供足够的安全保障,人们是不会如此依赖它的.幸运的是,在大牛 ...

  4. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  5. HTTPS详解二:SSL / TLS 工作原理和详细握手过程

    HTTPS 详解一:附带最精美详尽的 HTTPS 原理图 HTTPS详解二:SSL / TLS 工作原理和详细握手过程 在上篇文章HTTPS详解一中,我已经为大家介绍了 HTTPS 的详细原理和通信流 ...

  6. 开源项目SMSS发开指南(五)——SSL/TLS加密通信详解(下)

    继上一篇介绍如何在多种语言之间使用SSL加密通信,今天我们关注Java端的证书创建以及支持SSL的NioSocket服务端开发.完整源码 一.创建keystore文件 网上大多数是通过jdk命令创建秘 ...

  7. SSL/TLS协议详解(下)——TLS握手协议

    本文转载自SSL/TLS协议详解(下)--TLS握手协议 导语 在博客系列的第2部分中,对证书颁发机构进行了深入的讨论.在这篇文章中,将会探索整个SSL/TLS握手过程,在此之前,先简述下最后这块内容 ...

  8. SSL/TLS协议详解(中)——证书颁发机构

    本文转载自SSL/TLS协议详解(中)--证书颁发机构 导语 上一篇中,我们讨论了关于Diffie Hellman算法的SSL/TLS密钥交换.我们最终认为需要第三方来验证服务器的真实性,并提出了证书 ...

  9. SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法

    本文转载自SSL/TLS协议详解(上):密码套件,哈希,加密,密钥交换算法 导语 作为一名安全爱好者,我一向很喜欢SSL(目前是TLS)的运作原理.理解这个复杂协议的基本原理花了我好几天的时间,但只要 ...

随机推荐

  1. ELK日志系统:Elasticsearch+Logstash+Kibana+Filebeat搭建教程

    ELK日志系统:Elasticsearch + Logstash + Kibana 搭建教程 系统架构 安装配置JDK环境 JDK安装(不能安装JRE) JDK下载地址:http://www.orac ...

  2. python之路day12--装饰器的进阶

    装饰器# 开发原则:开发封闭原则# 装饰器的作用:在不改变原函数的调用函数下,在函数的前后添加功能.# 装饰器的本质:闭包函数 import time def timmer(f): #func #ti ...

  3. 【洛谷P1090 合并果子】

    题目描述 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子的重量之和.可 ...

  4. 反射与jvm

  5. 使用VLC Activex插件做网页版视频播放器

    网上找的一个小例子,包括时长播放时间等等都有. mrl可以设置本地文件,这样发布网站后只能播放本地有的文件, 如果视频文件全在服务器上,其他电脑想看的话,则可以IIS上发布个视频文件服务器,类似htt ...

  6. netty的简单的应用例子

    一.简单的聊天室程序 public class ChatClient { public static void main(String[] args) throws InterruptedExcept ...

  7. hadoop记录-Hadoop参数汇总

    Hadoop参数汇总 linux参数 以下参数最好优化一下: 文件描述符ulimit -n 用户最大进程 nproc (hbase需要 hbse book) 关闭swap分区 设置合理的预读取缓冲区 ...

  8. 适用于单片机的数据加密算法:xxtea

    转:https://www.cnblogs.com/LittleTiger/p/4384741.html 各位大侠在做数据传输时,有没有考虑过把数据加密起来进行传输,若在串口或者无线中把所要传的数据加 ...

  9. Kubernetes基本功能

    说明 目前kubernetes的资料介绍很多也很深刻,本文只是做一个针对自己学习k8s过程的介绍,仅仅是学习笔记的记录. 一.基本使用 1. 命令行 集群信息 Namespace 信息 Control ...

  10. Access-Control-Allow-Origin设置跨域

    我来自己写一下答案,以给后来的朋友一点思路和建议:1,首先把Access-Control-Allow-Origin设置成*是不妥的,自己的接口服务器不能允许所有人都可以访问.2,具体哪里可以设置Acc ...