HTTPS单向认证、双向认证、抓包原理、反抓包策略( 二 )


(4)客户端发送自己的客户端证书给服务端,证书里面有客户端的公钥:C_公钥
(5)客户端发送支持的对称加密方案给服务端,供其选择
(6)服务端选择完加密方案后,用刚才得到的C_公钥去加密选好的加密方案
(7)客户端用自己的C_私钥去解密选好的加密方案,客户端生成一个随机数(密钥F),用刚才等到的服务端B_公钥去加密这个随机数形成密文,发送给服务端 。
(8)服务端和客户端在后续通讯过程中就使用这个密钥F进行通信了 。和之前的非对称加密不同,这里开始就是一种对称加密的方式
HTTPS基本思路总结
HTTPS在保证数据安全传输上使用对称加密和非对称加密相结合的方式来进行的,简单来说就是通过一次非对称加密算法进行了最终通信密钥的生成、确认和交换,然后在后续的通信过程中使用最终通信密钥进行对称加密通信 。之所以不是全程非对称加密,是因为非对称加密的计算量大,影响通信效率 。
抓包原理
HTTPS即使安全,也是能够被抓包的,常见的抓包工具有:Charles、fildder等 。
常用的HTTPS抓包方式是作为中间人,对客户端伪装成服务端,对服务端伪装成客户端 。简单来说:

  • 截获客户端的HTTPS请求,伪装成中间人客户端去向服务端发送HTTPS请求
  • 接受服务端返回,用自己的证书伪装成中间人服务端向客户端发送数据内容 。
具体过程如下图所示:
 
HTTPS单向认证、双向认证、抓包原理、反抓包策略

文章插图
 
 
反抓包策略
为了防止中间人攻击,可以使用SSL-Pinning的技术来反抓包 。可以发现中间人攻击的要点的伪造了一个假的服务端证书给了客户端,客户端误以为真 。解决思路就是,客户端也预置一份服务端的证书,比较一下就知道真假了 。
SSL-pinning有两种方式: 证书锁定(Certificate Pinning) 和公钥锁定( Public Key Pinning) 。
  • 证书锁定 需要在客户端代码内置仅接受指定域名的证书,而不接受操作系统或浏览器内置的CA根证书对应的任何证书,通过这种授权方式,保障了App与服务端通信的唯一性和安全性,因此客户端与服务端(例如API网关)之间的通信是可以保证绝对安全 。但是CA签发证书都存在有效期问题,缺点是在 ** 证书续期后需要将证书重新内置到APP中** 。
  • 公钥锁定 提取证书中的公钥并内置到客户端中,通过与服务器对比公钥值来验证连接的正确性 。制作证书密钥时,公钥在证书的续期前后都可以保持不变(即密钥对不变),所以可以避免证书有效期问题,一般推荐这种做法 。
突破SSL-Pinning抓包
在逆向界,一山更比一山高 。思路是这样的:内置证书或者公钥的时候,常常会有对比验证的函数,直接控制这个函数的返回结果让验证通过不就好了吗 。于是就有了一个突破SLL-Pinning的经典操作:采用Xposed+justTrustme模块 。这个方案使用的是JustTrustMe这个Xposed模块,它所做的事情就是将各种已知的的HTTP请求库中用于校验证书的API都进行Hook,使无论是否是可信证书的情况,校验结果返回都为正常状态,从而实现绕过证书检查的效果




推荐阅读