请教SSL握手过程中,为什么抓包找不到pre-ordermaster-key

下面我就用这些图片作为例子,配合我半年前写的《SSL/TLS协议运行机制的概述》来解释SSL协议。

一、SSL协议的握手过程

开始加密通信之前客户端和服务器首先必须建立连接囷交换参数,这个过程叫做握手(handshake)

假定客户端叫做爱丽丝,服务器叫做鲍勃整个握手过程可以用下图说明(点击看大图)。


第一步爱丽丝给出协议版本号、一个客户端生成的随机数(Client random),以及客户端支持的加密方法

第二步,鲍勃确认双方使用的加密方法并给出數字证书、以及一个服务器生成的随机数(Server random)。

第三步爱丽丝确认数字证书有效,然后生成一个新的随机数(Premaster secret)并使用数字证书中的公钥,加密这个随机数发给鲍勃。

第四步鲍勃使用自己的私钥,获取爱丽丝发来的随机数(即Premaster secret)

第五步,爱丽丝和鲍勃根据约定的加密方法使用前面的三个随机数,生成"对话密钥"(session key)用来加密接下来的整个对话过程。

上面的五步画成一张图,就是下面这样


握掱阶段有三点需要注意。

(1)生成对话密钥一共需要三个随机数

(2)握手之后的对话使用"对话密钥"加密(对称加密),服务器的公钥和私钥只用于加密和解密"对话密钥"(非对称加密)无其他作用。

(3)服务器公钥放在服务器的数字证书之中

从上面第二点可知,整个对話过程中(握手阶段和其后的对话)服务器的公钥和私钥只需要用到一次。这就是CloudFlare能够提供Keyless服务的根本原因

某些客户(比如银行)想偠使用外部CDN,加快自家网站的访问速度但是出于安全考虑,不能把私钥交给CDN服务商这时,完全可以把私钥留在自家服务器只用来解密对话密钥,其他步骤都让CDN服务商去完成


上图中,银行的服务器只参与第四步后面的对话都不再会用到私钥了。

三、DH算法的握手阶段

整个握手阶段都不加密(也没法加密)都是明文的。因此如果有人窃听通信,他可以知道双方选择的加密方法以及三个随机数中的兩个。整个通话的安全只取决于第三个随机数(Premaster secret)能不能被破解。

虽然理论上只要服务器的公钥足够长(比如2048位),那么Premaster secret可以保证不被破解但是为了足够安全,我们可以考虑把握手阶段的算法从默认的RSA算法改为 Diffie-Hellman算法(简称DH算法)。

采用DH算法后Premaster secret不需要传递,双方只偠交换各自的参数就可以算出这个随机数。


上图中第三步和第四步由传递Premaster secret变成了传递DH算法所需的参数,然后双方各自算出Premaster secret这样就提高了安全性。

握手阶段用来建立SSL连接如果出于某种原因,对话中断就需要重新握手。

session ID的思想很简单就是每一次对话都有一个编号(session ID)。如果对话中断下次重连的时候,只要客户端给出这个编号且服务器有这个编号的记录,双方就可以重新使用已有的"对话密钥"而鈈必重新生成一把。

上图中客户端给出session ID,服务器确认该编号存在双方就不再进行握手阶段剩余的步骤,而直接用已有的对话密钥进行加密通信

session ID是目前所有浏览器都支持的方法,但是它的缺点在于session ID往往只保留在一台服务器上所以,如果客户端的请求发到另一台服务器就无法恢复对话。session ticket就是为了解决这个问题而诞生的目前只有Firefox和Chrome浏览器支持。


上图中客户端不再发送session ID,而是发送一个服务器在上一次對话中发送过来的session ticket这个session ticket是加密的,只有服务器才能解密其中包括本次对话的主要信息,比如对话密钥和加密方法当服务器收到session ticket以后,解密后就不必重新生成对话密钥了

转载之前:基于HTTP的视频流中客戶端有时会打开使用多条TCP与服务器连接,为了验证每一对话的sessionID是否相同使用wireshark进行了抓包分析(抓到的都是加密的包,无卵用/hello_yz并访问;

/hello_yz网站过程中wireshark截获到了三次握手的三个数据包,第四个包才是http的这也说明http确实是使用TCP建立连接的。

下面进行三个数据包的详细分析

首先對 封包详细信息分析说明

选中一条TCP协议数据包,它的封包详细信息如下图:

第一次握手数据包可以看到客户端发送一个TCP,标志位为SYN序列号为0, 代表客户端请求建立连接如下图:

第二次握手数据包,可以看到服务器发回确认包, 标志位为 SYN,表示只捕获主机名为的数据包

抓到嘚数据包如下所示可以看到在客户端发出第一次握手的请求后,没有得到服务器的应答握手失败,无法建立连接

  最近在倒腾SSL方面的项目之湔只是虽然对SSL了解过,但是不够深入正好有机会,认真学习一下开始了解SSL的是从https开始的,自从百度支持https以后如今全站https的趋势越来越強烈,互联网对安全的认识越来越深入本文根据自己的实际情况,对SSL链接建立做个总结SSL相关的非对称加密和加密,涉及到公钥、私钥、证书、对称密钥这些非常复杂,本文不会涉及本文重点介绍SSL的握手过程,客户端和服务端的步骤通过wireshark抓包分析整个过程。

   SSL:(Secure Socket Layer安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯该协议由两层组成:SSL记录协议和SSL握手协议。

   TLS:(Transport Layer Security传输层安全协议),鼡于两个应用程序之间提供保密性和数据完整性该协议由两层组成:TLS记录协议和TLS握手协议。

TLS是在SSL的基础上标准化的产物目前/5820

我要回帖

更多关于 做pre啥意思 的文章

 

随机推荐