超级详细的 https 中间人攻击流程。

  1. 客户端发送 https 请求
  2. 中间人截获 https 请求,然后在转发给服务端
    1. 中间人可以是抓包工具
    2. 中间人可以通过伪造证书的方式截获请求
  3. 服务端接收到请求【看起来是客户端发的,实际上已经经过中间人转发了】
  4. 服务端以为是一个安全的请求,向客户端发送数字证书,假设为 DC_A,证书中包含公钥和CA等信息。
    1. 作为 https 请求的服务端一定是购买了安全的证书,否则会提示不是安全的链接   
      1. 超级详细的 https 中间人攻击流程。_第1张图片
    2. 数字证书里面包含是公钥 PK_A,服务端私密保存数字证书对应的私钥SK_A
  5. 中间人截获数字证书 DC_A,使用 OpenSSL 提取其中的公钥 PK_A。然后把自己的数字证书 DC_B 发送给客户端
    1. 中间人有自己的数字证书,其中数字证书包含了自己的公钥 PK_B ,中间人私密保存自己的私钥 SK_B。
  6. 客户端接收到数字证书 DC_B【这个证书看起来是服务端发的,实际上是中间人的】,客户端会验证数字证书是否有效,步骤如下:
    1. 证书链验证:客户端检查证书是否由受信任的根证书颁发机构(CA)签发,通过信任链验证证书的有效性。
      1. 客户端的操作系统中内置了根证书,根证书通常用于验证 CA 。
      2. 根证书验证 CA 的流程是(信任链):信任设备的根证书 (操作系统内置)=> 信任根证书签发它的 CA => CA 信任颁发它的中间 CA => 以此类推,最终信任根证书签发的所有数字证书
      3. 所以,验证数字证书的本质是验证 CA
      4. 所以我们在实现中间人攻击之前,需要在我们的电脑上安装一个新的根证书,这个根证书就是用来验证中间人的数字证书的。【这个根证书和中间人证书是一个CA 签发的】
    2. 有效期验证:检查证书是否在有效期内
    3. 吊销状态检查:检查证书是否被吊销
  7. 客户端验证证书 DC_B 有效后,提取公钥 PK_B,并用公钥 PK_B 加密一个数据当作后续对称加密的私钥,这个数据通常是随机字符串使用哈希算法得到的哈希值,这里假设是 hash_B。
  8. 中间人拦截请求,得到使用自己的公钥 PK_B 加密的哈希值 hash_B,用自己的私钥 SK_B 解密,得到真实的哈希值 hash_B,这个真实的哈希值后续用来解密所有拦截的客户端的请求。
  9. 中间人再生成一个假的随机字符串 hash_A,用服务端的公钥 PK_A 加密,发给服务端。
  10. 服务端接收到请求,用自己的私钥 SK_A 解密得到哈希值 hash_A,他以为是客户端发的,实际是中间人伪造的;后续客户端用这个哈希值 hash_A 加密数据,和客户端进行后续的对称加密会话。
  11. 中间人拦截服务端的返回,用第8步假的哈希值 hash_A 就可以解密(因为是对称加密),然后再用 hash_B 加密,发给客户端
  12. 客户端接收到中间人用 hash_B 加密的数据,再用 hash_B 解密,就得到了服务端发送的数据。

更多关于中间人攻击的内容,可以参考这篇文章,非常详细!

你可能感兴趣的:(https,网络协议,http)