网络|使用 Wireshark 分析 TLS/SSL 协议

背景

  • 服务端(3.205)是开启 SASL_SSL 协议的9094端口的Kafka 服务器
  • 客户端(77.20)连接 9094 端口的生产者。
  • 此为单向 SSL 认证

在客户端使用 Wireshark 抓包,抓包的结果如下图所示:

1、2、3 条数据包是客户端和服务端之间建立 TCP 三次握手,

从序号为4的数据包开始进入TLS握手阶段,直到序号为17的数据包开始传输应用数据,说明TLS握手已经完成。

分析数据包

下面展开几个关键数据包(报文),进行详细分析。

Client Hello

网络|使用 Wireshark 分析 TLS/SSL 协议_第1张图片

方向: 客户端 -> 服务器发送Client Hello报文

TLS 记录层

TLS 首部

  • 内容类型Content Type: Handshake(22) 握手
  • 版本: TLS1.2
  • 长度: 167

内容:握手协议

  • 握手类型: Client Hello(1)
  • Cipher Suites: 客户端所支持的各种算法(29种)
  • Compress Methods: 由于是握手协议,提供的压缩算法为空 null
  • Random: 一个随机数(32字节),这个随机数由一个时间戳(4字节)加上部分随机序列号(28字节)组成,随后将应用于各种密钥的推导,并可以防止重播攻击。

最后要交付到传输层,目的端口号为9094.

序号为5的数据包为对方发过来ACK确认报文,序号为6的数据包为对方重复发送的ACK确认报文。后续此类数据包不再说明。

Multiple Handshake Messages

将多个握手报文集成封装到一个 TLS 记录层中发送

网络|使用 Wireshark 分析 TLS/SSL 协议_第2张图片

方向: 服务端 -> 客户端

Server Hello

网络|使用 Wireshark 分析 TLS/SSL 协议_第3张图片

内容:握手协议

  • 握手类型: Server Hello(2)
  • Cipher Suites: 服务器从客户端提供的密码组选择的密码算法 TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • Compress Methods: 选择的压缩算法为空 null
  • Random: 一个随机数(32字节),这个随机数由一个时间戳(4字节)加上部分随机序列号(28字节)组成,这个随机数的功能与客户端发送的随机数功能相同。
  • Session ID: 会话编号

Certificate

Certificate中包含了服务器的证书,以便客户端认证服务器的身份,并从中获取其公钥。展开其中的“certificates”节点,可以查看有关服务器证书的详细信息,如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第4张图片

Server Key Exchange 和 Server Hello Done

Server Key Exchange包含服务器的证书签名, Server Hello Done 表示本阶段的报文发送结束,具体信息如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第5张图片

Client Key Exchange

方向: 客户端 -> 服务端

Client Key Exchange中包含了客户端生成的预主密钥,并使用服务器的公钥进行加密处理,此过程并没有通过网络进行传输,没有在数据包中体现出来。

网络|使用 Wireshark 分析 TLS/SSL 协议_第6张图片

如果是双向验证,不仅是传输 Client Key Exchange,还有 Certificate (客户端证书,如果没有证书将发送 No Certificate 告警)以及 Certificate Verify 用于验证客户端证书,签名。

拓展: Encrypted Alert

如果服务端解密客户端发来的数据,解密失败时会发送解密失败的告警,如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第7张图片

Change Cipher Spec 和 Encrypted Handshake Message

方向: 双向奔赴

Change Cipher Spec

客户端通告启用协商好的各项参数,其内容类型(Content Type)值为20。

网络|使用 Wireshark 分析 TLS/SSL 协议_第8张图片

服务端 同样发送 Change Cipher Spec,将挂起的密码规约改为当前密码规约

网络|使用 Wireshark 分析 TLS/SSL 协议_第9张图片

Encrypted Handshake Message(加密握手报文)就是Finished报文

客户端用新的算法、密钥和密文加密发送一个报文,检查密钥交换和认证过程是否已经成功。

网络|使用 Wireshark 分析 TLS/SSL 协议_第10张图片

服务端同样发送Encrypted Handshake Message(Finished)报文回复客户端

网络|使用 Wireshark 分析 TLS/SSL 协议_第11张图片

至此,握手过程完成,

Application Data

握手完成后,客户端和服务器可以开始交换应用数据(Application Data)这是客户端向服务器发送的应用数据。整个报文封装在TLS记录层中,其内容类型(Content Type)值为23,版本为TLS 1.2,主体部分是已经加密的应用数据,这些加密数据都是双方使用协商好的参数进行安全处理,如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第12张图片

总结

握手大概可以分为四个阶段:

  • 第一个阶段是客户端发给服务端请求连接 Client Hello
  • 第二个阶段就是服务端回复客户端对应的证书、公钥信息、加密压缩算法
  • 第三个阶段是客户端告诉服务端自己的证书和公钥信息
  • 第四个阶段确认好对应的对称密钥后,让其生效测试下好不好使。

握手的目的是协商对称加密密钥,由于加密前数据包都是明文,所以如果一开始就亮出密钥就不安全,所以握手期间是通过非对称加密的方式进行协商密钥。

单向认证握手流程 如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第13张图片

双向认证握手流程 如下图所示:

网络|使用 Wireshark 分析 TLS/SSL 协议_第14张图片

单向认证比双向认证少了 服务端对客户端进行认证的阶段。

作者:高冷的白帽子
链接:https://juejin.cn/post/7225444782332362812
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

你可能感兴趣的:(网络,wireshark,ssl)