Security ❀ HTTP/HTTPS逐包解析交互过程细节

文章目录

  • 1. TCP三次握手机制
  • 2. HTTP Request 请求报文
  • 3. HTTP Response 响应报文
  • 4. SSL/TLS协议
    • 4.1. ClientHello 客户端Hello报文
    • 4.2 ServerHello 服务器Hello报文
    • 4.3. *ServerKeyExchange 服务公钥交换
    • 4.4. ClientKeyExchange 客户端公钥交换
    • 4.5. *CertificateVerify 证书验证报文
    • 4.6. ChangeCipherSpec 更改密钥规格
    • 4.7. Application Data 应用数据报文
    • 4.8. fnished 传输结束报文

本文主要解析 TCP -> HTTP -> SSL/TLS 交互过程中的数据包详细信息。

1. TCP三次握手机制

Client使用随机端口请求Server的HTTP服务80端口(序号1、2、5);
在这里插入图片描述

2. HTTP Request 请求报文

当TCP连接建立完成后,Client发送HTTP请求服务端资源,服务器收到请求后会回复ACK(序号7、8);

请求类型

  • GET:参数携带位置在URI处;
  • POST:参数携带位置在正文处;
  • PUT:更新资源;
  • DELETE:删除资源;

结尾标识

  • \r\n:字段结尾标识符。

3. HTTP Response 响应报文

当服务器收到HTTP合理且符合规范的请求后,会做出响应,转发到Client;

4. SSL/TLS协议

SSL/TLS是一个安全通信框架,上面可以承载HTTP协议或者SMTP/POP3协议等(本次以TLS 1.0协议为案例做描述讲解)。协议握手过程如下:

本文部分报文图片来源于网络,其中169.254.255.66为客户端,169.254.100.98为服务器。

4.1. ClientHello 客户端Hello报文

Client向Server发送一个Hello信息(包26),包含其:可用版本号、当前时间(位于随机数字段下)、客户端随机数(防伪造)、会话ID(会话保持机制)、可用的加算法清单、可用的压缩方式清单;

常见的12种加密算法:
Security ❀ HTTP/HTTPS逐包解析交互过程细节_第1张图片

扩展内容:
Security ❀ HTTP/HTTPS逐包解析交互过程细节_第2张图片

4.2 ServerHello 服务器Hello报文

Server收到Client的Hello报文后,会向客户端回复一个Hello消息(包27),包含其服务侧的信息:使用的版本号、当前时间、服务器随机数、会话ID、使用的加密算法、使用的压缩方式、CA证书;

Certificate CA证书:服务侧需要发送自己的证书清单,证书可能是层级结构的,因此除了服务侧本身的证书外还需要提供为服务侧签名的证书,用来证明服务器的合法性。

4.3. *ServerKeyExchange 服务公钥交换

若服务侧的CA证书信息不足时,可以使用ServerKeyExchange构建加密通道;
ServerKeyExchange包含两种形式:

  • RSA形式加密:传递的就是RSA构建公钥密码的参数E、N;
  • Diff-Hellman密钥交互协议加密:传递的就是密钥交换的参数;

注意,注意,注意:若服务器发送Hello时携带了done的消息,则告诉客户端自己所发的消息结束了,并不会存在ServerKeyExchange报文(包27最底下字段内容)。

4.4. ClientKeyExchange 客户端公钥交换

ClientKeyExchange仍包含两种方式:

  • 公钥或者RSA模式(包28):Client根据ClientHello的随机数和ServerHello的随机数生成预备主密码,通过该公钥进行加密,返回到服务侧;
  • Diff-Hellman:Client会发送自己这一方要生成Diff-Hellman密钥而需要公开的值。

4.5. *CertificateVerify 证书验证报文

Client向Server证明自己是Client证书的持有者。

4.6. ChangeCipherSpec 更改密钥规格

服务器告知客户端切换密码规格(包29),表示后面的消息将会以前面协商通过的密钥进行加密传输。
Security ❀ HTTP/HTTPS逐包解析交互过程细节_第3张图片

4.7. Application Data 应用数据报文

数据传输报文(包30)。
Security ❀ HTTP/HTTPS逐包解析交互过程细节_第4张图片

4.8. fnished 传输结束报文

传输结束标识,代表握手协议结束。

你可能感兴趣的:(Security,Middleware,Linux,&,Shell,http,https)