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

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

SSL/TLS位于传输层和应用层之间,应用层数据不再直接传递给传输层,而是传递给SSL层,SSL层对从应用层收到的数据进行加密,并增加自己的SSL头。

SSL/TLS协议的基本过程是这样的:
(1) 客户端向服务器端索要并验证公钥。
(2) 双方协商生成"对话**"。
(3) 双方采用"对话**"进行加密通信。

首先启动WireShark并且打开浏览器,访问使用HTTPS加密的网站,浏览,抓取数据包,发现不能看到数据包的内容。(因为会话被加密了)
由于浏览器用日志文件的方式记录了用来加密TLS数据包的会话**,因此可以在WireShark中指定该文件来达到**目的。

下图为一次ssl会话建立过程:
Wireshark分析SSL协议
下面为抓包操作:

配置环境变量
Wireshark分析SSL协议
配置Wireshark 设置文件路径
Wireshark分析SSL协议
重启浏览器和WireShark 开始抓包!对抓到的包进行过滤,过滤规则:ip.addr == 23.99.125.55 && ssl
Wireshark分析SSL协议
使用wireshark过滤ssl流量,可以看到有几个明显的ssl会话建立包,例如client hello,server hello等。查看抓取到的数据包的详细内容:

1、 Client HelloWireshark分析SSL协议
不难看出,这一握手过程,客户端以明文形式传输了如下信息:

  1. 版本信息(TLS 1.2)
  2. 随机数
  3. Session ID(用于加快握手过程,可参考TLS会话复用)
  4. 加密套
  5. 压缩算法
  6. 其它一些扩展的(Extension),比如签名算法,服务器名称

2、Server Hello
Wireshark分析SSL协议
这一阶段,服务端返回所选择的协议版本(Version),加密套,压缩算法,随机数,Session ID等,同时将包含自己公钥的证书发送给客户端(Certificate)。

3、数据传输经过了 SSL 握手后,服务端的身份认证成功,协商出了加密算法为 AES,**为 xxxxx(客户端和服务端拿三个随机值用相同算法计算出来的,并没有明文传输)。一切准备就绪。 SSL 握手成功,意味着各种应用层协议都可以加密传输。因此对之前所有握手消息进行散列运算,加密后发送给服务器。

Application Data
应用数据传输消息。因为这里是 HTTPS,所以可以对 HTTP 应用协议数据加密然后传输了。

Wireshark分析SSL协议
从这里,不知道**是无法知道这里传输的是什么数据,连传输的是什么协议的内容都不知道。 所以之前创建 SSL 隧道,让代理服务器盲传 HTTPS 数据,就得通过 CONNECT 方法告诉代理服务器要连哪台主机,哪个端口号,要不然代理服务器也是一脸懵逼。 所以 SSL 协议是很独立的,这里是对 HTTP 进行了加密,也可以对其他协议进行加密。它就像是 TCP 和应用层协议的中间层,为上层协议提供了加密的数据传输。

Encryted Alert
SSL 警告消息,因为是加密的内容,所以单从 Wireshark 看不出警报的内容。警报消息经常只是客户端用来提示服务端 SSL 传输结束,对照抓包到的内容确实如此。所以这里只是 SSL 传输结束的一个信号。发出了 Encryted Alert 后客户端数据传输完毕,准备进入四次挥手断开 TCP 连接。尝试了好几次没找到这个数据包,可能和没正常断开连接有关。

相关文章: