为什么我抓不到baidu的数据包?( 二 )


或者
$ open -a google Chrome #在mac里打开chrome浏览器
此时会看到在/Users/xiaobaidebug/下会多了一个ssl.key文件 。
这时候跟着下面的操作修改wireshark的配置项 。

为什么我抓不到baidu的数据包?

文章插图
打开wireshark的配置项
找到Protocols之后,使劲往下翻,找到TLS那一项 。
为什么我抓不到baidu的数据包?

文章插图
在配置项中找到Protocols
将导出的ssl.key文件路径输入到这里头 。
为什么我抓不到baidu的数据包?

文章插图
在Protocols中找到TLS那一栏
点击确定后,就能看到18号和20号数据包已经被解密 。
为什么我抓不到baidu的数据包?

文章插图
解密后的数据包内容
此时再用http.host == "baidu.com",就能过滤出数据了 。
为什么我抓不到baidu的数据包?

文章插图
解密后的数据包中可以过滤出baidu的数据包
到这里,其实看不了数据包的问题就解决了 。
但是,新的问题又来了 。
ssl.key文件是个啥?
这就要从HTTPS的加密原理说起了 。
HTTPS握手过程
HTTPS的握手过程比较繁琐,我们来回顾下 。
先是建立TCP连接,毕竟HTTP是基于TCP的应用层协议 。
在TCP成功建立完协议后,就可以开始进入HTTPS阶段 。
HTTPS可以用TLS或者SSL啥的进行加密,下面我们以TLS1.2为例 。
总的来说 。整个加密流程其实分为两阶段 。
第一阶段是TLS四次握手,这一阶段主要是利用非对称加密的特性各种交换信息,最后得到一个"会话秘钥" 。
第二阶段是则是在第一阶段的"会话秘钥"基础上,进行对称加密通信 。
为什么我抓不到baidu的数据包?

文章插图
TLS四次握手
我们先来看下第一阶段的TLS四次握手是怎么样的 。
第一次握手:
 
  •  
    • Client Hello:是客户端告诉服务端,它支持什么样的加密协议版本,比如 TLS1.2,使用什么样的加密套件,比如最常见的RSA,同时还给出一个客户端随机数 。
     
 
第二次握手:
 
  •  
    • Server Hello:服务端告诉客户端,服务器随机数 + 服务器证书 + 确定的加密协议版本(比如就是TLS1.2) 。
     
 
第三次握手:
 
  •  
    • Client Key Exchange: 此时客户端再生成一个随机数,叫 pre_master_key  。从第二次握手的服务器证书里取出服务器公钥,用公钥加密 pre_master_key,发给服务器 。
     
  •  
    • Change Cipher Spec: 客户端这边已经拥有三个随机数:客户端随机数,服务器随机数和pre_master_key,用这三个随机数进行计算得到一个"会话秘钥" 。此时客户端通知服务端,后面会用这个会话秘钥进行对称机密通信 。
     
  •  
    • Encrypted Handshake Message:客户端会把迄今为止的通信数据内容生成一个摘要,用"会话秘钥"加密一下,发给服务器做校验,此时客户端这边的握手流程就结束了,因此也叫Finished报文 。
     
 
第四次握手: