https

315 阅读2分钟

https 加密解密流程

  • Client发送请求,带上TLS版本、对称加密算法、非对称加密算法、hash算法、客户端随机数A(计算加密密钥)。
  • Server响应请求,传给Client确定后的TLS、对称和非对称加密算法、hash算法、服务器端随机数B(计算加密密钥)。
  • 服务器把证书发送给客户端(公钥、域名地址、证书签名、证书签发的机构)。
        验证证书合法性:
        1)首先客户端会使用同样的Hash算法获取该证书的Hash值H1。
        2)通常浏览器和操作系统中集成了CA的公钥信息(递归验证的过程),浏览器或者
           客户端收到证书后可以使用CA的公钥解密 证书内容,得到一个Hash值H2,最后
           比较 H1和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。
  • Client用公钥加密一个随机数C(Pre-Master-Secret)发送给服务器。
  • Client和server通过三个随机数生成Master-Secret,然后通过Master-Secret生成对称加密密钥。之后的数据通信过程都通过对称加密的密钥来进行加解密。

https 被抓包原理(抓包工具)

  • 抓包工具的工作是介于客户端和服务器中间的,它会先于客户端接收到服务器返回的证书,然后它也可以使用操作系统内置的CA公钥对证书数据解密,从而得到服务器的公钥,并先将这个公钥保存起来。
  • 接下来,抓包工具会将解密出来的数据进行调包,将其中服务器返回的公钥替换成自己的一个公钥,然后使用自己的非对称加密私钥对数据重新加密,并将这段重新加密后的数据返回给客户端。
  • 客户端需要在自己的手机上或者浏览器上安装抓包工具的证书(抓包工具的公钥),需要有抓包工具的公钥才能进行数据解密。

防抓包方式

对于HTTPS API接口,如何防止抓包呢?既然问题出在证书信任问题上,那么解决方法就是在我们的APP中预置证书。在TLS/SSL握手时,用预置在本地的证书中的公钥校验服务器的数字签名,只有签名通过才能成功握手。由于数字签名是使用私钥生成的,而私钥只掌握在服务器,所以没有办法以中间人的方式进行抓取数据。