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握手时,用预置在本地的证书中的公钥校验服务器的数字签名,只有签名通过才能成功握手。由于数字签名是使用私钥生成的,而私钥只掌握在服务器,所以没有办法以中间人的方式进行抓取数据。