HTTPS|SSL笔记-SSL双向认证成功握手过程(含wireshark分析)

短命女 2022-09-10 09:27 321阅读 0赞

这里只研究连接过程。

整体的流程是这样的

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16

前三个那个SYN、SYN ACK、ACK是TCP三次握手,就不说了。

  1. 握手成功后,客户端发送自己支持的加密套,和随机数给服务端,也就是Client Hello

对应的是这个:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 1

其中内容

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 2

  1. 服务端收到Client Hello回复Ack

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 3

  1. 服务端发送自己的随机数以及选择一个加密套以及服务端证书给客户端也就是Server Hello

对应的包:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 4

具体内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 5

可知Handshake为Server Hello Done。

Random为随机数。Cipher Suite为选择的加密套。

Certificate里面含有证书。

  1. 客户端收到Server Hello后,回复Ack

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 6

  1. 客户端端发送自己的证书,握手类型为Client Key Exchange

对应的包:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 7

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 8

其中Handshake Protocol为Client Key Exchange。

Certificate为证书。

  1. 服务端收到后回复ACK对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 9

  1. 客户端发送Certificate Verify

对应的包如下;

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 10

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 11

发送Certificate Verify类型的握手需要2个前提条件:

①服务端获取了客户端证书;

②客服端发送了非0长度的证书。

客户端想要证明自己拥有该证书,需要用私钥签名一段数据给服务端验证,看服务端能不能用客户端公钥进行验签。

  1. 服务端收到后,回复ACK,对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 12

9.客户端发送Change Cipher Spec对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 13

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 14

步骤1和3,客户端服务端都交换了随机数,通过这个随机数,客户端和服务端会生成预主密钥,这个包的意思就是告诉服务端,我现在开始用主密钥进行加密了(客户端随机数 + 服务端随机数 + 预主密钥 = 主密钥)。

  1. 服务端收到后回复ACK对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 15

  1. 客户端发送Encrypted Handshake Message对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 16

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 17

这个包的目的就是告诉对端自己再整个握手过程中收到了什么数据,发送了什么数据,来保证中间没人篡改报文。

  1. 服务端回复ACK,对应此包:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 18

  1. 服务端发送Change Cipher Spec对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 19

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 20

步骤1和3,客户端服务端都交换了随机数,通过这个随机数,客户端和服务端会生成预主密钥,这个包的意思就是告诉客户端,我现在开始用主密钥进行加密了(客户端随机数 + 服务端随机数 + 预主密钥 = 主密钥)。

  1. 客户端回复ACK,对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 21

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 22

  1. 服务端发送Encrypted Handshake Message,对应包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 23

内容如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 24

这个包的目的就是告诉对端自己再整个握手过程中收到了什么数据,发送了什么数据,来保证中间没人篡改报文。

  1. 客户端回复ACK,这样SSL双向认证就完成了,对应的包如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 25

内如下:

watermark_type_ZHJvaWRzYW5zZmFsbGJhY2s_shadow_50_text_Q1NETiBASVQxOTk1_size_20_color_FFFFFF_t_70_g_se_x_16 26

发表评论

表情:
评论列表 (有 0 条评论,321人围观)

还没有评论,来说两句吧...

相关阅读