[toc]

HTTP协议

HTTP(hypertext transfer protocol )协议是一种七层协议,是万维网通信的基石,通常使用tcp协议(HTTP3使用quic(udp)),默认端口80

请求方法

GET、HEAD:获取资源

POST:上传资源

PUT:修改资源

DELETE:删除资源

TRACE:回显请求

OPTIONS:回复资源所有可用方法

CONNECT:留给SSL加密使用

幂等性

在函数式编程中,幂等函数是对任何值x具有f(f(x))= f(x)属性的函数,在编程领域,则意为同一个系统,使用同样的条件,一次请求和重复的多次请求对系统资源的影响是一致的

GET、HEAD、PUT、DELETE、OPTIONS、TRACE都是幂等的,而GET、HEAD、OPTIONS、TRACE一般来说没有副作用。

状态码

  • 1xx消息:请求已被服务器接收,继续处理
  • 2xx成功:请求成功
  • 3xx重定向:重定向
  • 4xx请求错误:客户端错误
  • 5xx服务器错误:服务器错误

HTTP keeep-alive

HTTP1.1加入

优点:同时打开的TCP链接少了、降低延时

缺点:请求后保持链接,可能会影响性能

HTTPS

HTTPS(hypertext transfer protocol secure)是使用HTTP通信,使用SSL/TLS加密数据包,默认端口443

传输过程

证书验证阶段:

  1. 浏览器发起HTTPS请求
  2. 服务端返回HTTPS证书和SSL非对称加密公钥
  3. 浏览器,验证HTTPS证书合法性,合法就生成随机数

传输阶段:

  1. 浏览器通过SSL公钥加密随机数,传输到服务端
  2. 服务端通过SSL私钥解密,通过随机数构造对称加密(TLS),通过TLS传输

如何验证证书合法性

证书包含:公钥、持有者信息、证书机构信息(CA)、数字签名和算法、有效期等

证书签发:

  1. CA把各种信息打包通过计算得到hash值
  2. CA使用私钥对hash值加密生成证书签名
  3. 将证书签名加到文件证书上,形成数字证书

证书校验:

  1. 浏览器通过同样hash算法得到hash值
  2. 浏览器用公钥对CA数字签名解密与自己算的hash值比较,若相同就是可信的

证书信任链:通过当前证书-中间证书-根证书逐级担保信任

中间人攻击

A与C进行通信时,需要经过B进行传输,B获取了A和C的通话信息,B分别伪装成A和C通信,伪装成C和A通信

非对称加密场景

A发送公钥给C时,B作为中间人攻击,B也生成公私钥,B将自己的公钥发给C和C通信,B通过A发送的公钥和A通信

HTTPS中的中间人攻击

在缺少证书验证环节时,可以进行HTTPS中间人攻击,具体流程如下

  1. A与C进行通信时,本地请求劫持,B成为中间人
  2. B返回自己伪造的证书给A,B与C通信
  3. A不会验证证书,直接创建随机数,与B进行通信
  4. B与C按照正常流程进行通信