https请求

之前面试问到了BurpSuite抓取https包原理这个问题,在面试官的提示下大概答出来了。在这里再总结一下。

首先说一下https协议,可以说https=http+ssl,这里会存在一个加密方式叫非对称加密。

  • https请求
    客户端向服务端发送https请求;
  • 生成公钥和私钥
    服务端收到请求之后,生成公钥和私钥。在非对称加密里,公钥相当于是锁,私钥相当于是钥匙,只有私钥才能够打开公钥锁住的内容,公钥用来加密,私钥用来解密;
  • 返回公钥
    服务端将公钥(证书)返回给客户端,公钥里面包含有很多信息,比如证书的颁发机构、过期时间等等;
  • 客户端验证公钥
    客户端收到公钥之后,首先会验证其是否有效,如颁发机构或者过期时间等,如果发现有问题就会抛出异常,提示证书存在问题。如果没有问题,那么就生成一个随机值,作为客户端的密钥,然后用服务端的公钥加密;
  • 发送客户端密钥
    客户端用服务端的公钥加密密钥,然后发送给服务端。
  • 服务端收取密钥,对称加密内容
    服务端收到经过加密的密钥,然后用私钥将其解密,得到客户端的密钥,然后服务端把要传输的内容和客户端的密钥进行对称加密,这样除非知道密钥,否则无法知道传输的内容。
  • 加密传输
    服务端将经过加密的内容传输给客户端。
  • 获取加密内容,解密
    客户端获取加密内容后,用之前生成的密钥对其进行解密,获取到内容。

BurpSuite 是如何抓https包的

这里的中间人,就是BurpSuite。这个图分析了BurpSuite是如何能抓到明文的https包的。

  • 使用BurpSuite截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信;

  • 在这里就获取了服务器的发送给客服端的公钥,然后在BurpSuite上生成公私钥。再把BurpSuite生成的公钥发送给客户端。

  • 而在之后的客户端发送的对称加密密钥,其实也是发送给BurpSuite的,在这里客户端就与BurpSuite建立了https连接。而BurpSuite则代替了客户端与服务器建立了https连接。

  • 完成这一流程之后,客户端发送给服务器的内容,在BurpSuite上解密得到明文,所以我们在BurpSuite上看到的内容就是明文。而向服务器发送请求的时候,BurpSuite会用服务器协商好的密钥进行加密然后传输内容。

  • 同样服务器返回的内容也是,BurpSuite会先解密,然后得到明文, BurpSuite 会伪装成服务器,再用BurpSuite与客户端协商好的密钥进行加密然后传输内容。

  • 通过这样的手段,便可以获取客户端和服务器之间通信的所有内容。 使用中间人攻击手段,必须要让客户端信任中间人的证书,如果客户端不信任,则这种攻击手段也无法发挥作用。