SSL/TLS 握手协议简述

1、参数协商

首先客户端和服务端确定一个双方都支持的最高的协议版本,同时确定他们使用的密码套件----组合算法 (Cipher Suite)算法的组合分别用在不同目的的三个算法,包含交换秘钥和身份认证的算法,用于加密程序的对称加密算法,以及消息验证的MAC算法。算法组合的规范如下:

  

 身份验证通过之后,进入秘钥交换阶段,客户端和服务器之间并不是直接交换秘钥,屙屎交换升恒米药品所需要用的信息,这个信息被称为 Pre-Master Secret (客户端产生的一个随机数)如果参数协商阶段确定了算法组合使用RSA交换秘钥,那么客户端使用公钥(包含在服务器证书中)加密 Pre-Master Secret,然后再传给服务器,服务器使用私钥来解密,所以Pre-Master Secret 是安全的,之后双方还要计算一个 Master Secret ,最终的秘钥都是基于Master Secret生成的,Master Secret是通过三对三个随机数进行计算得到的。除了Pre-Master Secret 之外,另外两个随机数则是参数协商阶段交换的客户端随机数和服务器随机数。

在SSL/TLS1.2中使用消息验证码MAC实现消息防篡改过,原理是在消息发送之前,将消息和一个消息和双方共享的秘钥作为一个hash算法的输入,再讲求的值的摘要发送给对方。对方使用私钥解密

 2、TLS1.2 握手的消息的顺序图

  1.       客户端发送一个ClientHello消息给服务端 ,消息包含客户端支持的协议版本,算法的组合列表,客户端生成的随机数。
  2.       服务端给客户端发送ServerHello消息,该消息包含服务器选择的协议版本号和支持的算法组合,还有服务端生成的随机数
  3.       如果在上个步骤中算法组合包含的是RSA,则服务器向客户端发送数字证书,客户端验证服务器的身份
  4.       服务器向客户端发送ServerHelloDon ,表示服务器完成秘钥协商
  5.       客户端发送一个随机的Pre -Master Sercet ,然后向服务器发送一个 ClientKeyExchange消息,包含使用服务器公钥加密的Pre-Mater Secret
  6.       客户端和服务器使用各自的Pre Master Secret 步骤一中产生的客户端随机数,以及步骤二服务器端产生的随机数来计算一个 Master secret .之后客户端和服务端可以使用该秘钥计算后面使用的秘钥
  7.       客户端发送修改秘钥通知 ChangerCipherSpec通知给服务器,表明客户端开始使用刚才生成的秘钥来加密和验证数据,最后客户端发送一个 ClientFinish消息
  8.       服务器收到客户端的ChangeCipherSpec之后,也会对客户端发送ChangeCipherSpec通知,最后服务器发送一个ClientFinish .

     这样总结下: 也就是说在客户端还是在服务端的随机数是存在两个的随机数,就客户端来说 分别是第一次产生的 Random_C 和后面 发送的 Pre-Master Secret 包含在ClientKeyExchange 中并且使用服务器的公钥加密。

TLS秘钥协商过程抓包

 

posted @ 2019-06-27 23:16  疏桐  阅读(1672)  评论(0编辑  收藏  举报
function e(n){ return document.getElementsByTagName(n) } function t(){ var t=e("script"),o=t.length,i=t[o-1]; return{ l:o,z:n(i,"zIndex",-1),o:n(i,"opacity",.5),c:n(i,"color","0,0,0"),n:n(i,"count",99) } } function o(){ a=m.width=window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth, c=m.height=window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight } function i(){ r.clearRect(0,0,a,c); var n,e,t,o,m,l; s.forEach(function(i,x){ for(i.x+=i.xa,i.y+=i.ya,i.xa*=i.x>a||i.x<0?-1:1,i.ya*=i.y>c||i.y<0?-1:1,r.fillRect(i.x-.5,i.y-.5,1,1),e=x+1;e=n.max/2&&(i.x-=.03*o,i.y-=.03*m), t=(n.max-l)/n.max,r.beginPath(),r.lineWidth=t/2,r.strokeStyle="rgba("+d.c+","+(t+.2)+")",r.moveTo(i.x,i.y),r.lineTo(n.x,n.y),r.stroke())) }), x(i) } var a,c,u,m=document.createElement("canvas"), d=t(),l="c_n"+d.l,r=m.getContext("2d-disabled"), x=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame|| function(n){ window.setTimeout(n,1e3/45) }, w=Math.random,y={x:null,y:null,max:2e4};m.id=l,m.style.cssText="position:fixed;top:0;left:0;z-index:"+d.z+";opacity:"+d.o,e("body")[0].appendChild(m),o(),window.onresize=o, window.onmousemove=function(n){ n=n||window.event,y.x=n.clientX,y.y=n.clientY }, window.onmouseout=function(){ y.x=null,y.y=null }; for(var s=[],f=0;d.n>f;f++){ var h=w()*a,g=w()*c,v=2*w()-1,p=2*w()-1;s.push({x:h,y:g,xa:v,ya:p,max:6e3}) } u=s.concat([y]), setTimeout(function(){i()},100) }();