android study 7 https

Author Avatar
Xzhah 6月 29, 2022
  • 在其它设备中阅读本文章

https认证

1.SSL身份验证的工作原理

​ 1.网站的所有者需要为网站域名购买SSL证书。然后CA进行验证,验证成功后,为该域名颁发SSL证书

​ 2.网站所有者将CA机构颁发的SSL证书公钥和私钥都安装到网站服务器上

​ 3.客户端提交HTTPS请求,进行SSL握手

​ 4.当SSL握手结束后,浏览器生成会话密钥,并使用SSL证书中的公钥对会话密钥进行加密

​ 5.服务器接收到后用私钥进行解密

​ 6.浏览器与服务器用这个会话密钥解密传输过程中的数据

2.中间人攻击

​ 中间人攻击流程如下:

​ 1.客户端发起https请求,开始三次握手,并且发送SSL版本及生成的随机数random-c

  1. 中间人拦截客户端发送的内容,自己记录random-c并且发送客户端信息给服务器。
  2. 服务器收到信息,生成随机数random-s,将随机数random-s与SSL证书,公钥发送给客户端。
  3. 中间人拦截信息,将服务器发送的信息记录下来,将自己的SSL证书和公钥发送给客户端
  4. 客户端收到中间人发来的SSL证书,公钥,进行验证。客户端到自己信任的CA证书机构列表进行对比。此时攻击者可以自己花钱买一份受认证的证书,也可以设法让受害者下载证书到本地并且信任。这样的话客户端就会通过证书验证,然后发送自己支持的加密方式给服务器
  5. 中间人获取支持的加密方式,转发给服务器
  6. 服务器收到加密方式列表,选择合适的对称加密给客户端,中间人拦截下来记录后转发
  7. 客户端收到加密方式,生成随机数pre-master,和之前的随机数random-s,random-c一起组成对称加密密钥,然后将pre-master使用之前收到的公钥加密,发送给服务器
  8. 中间人截获信息,用自己的私钥解密后,用服务器的公钥加密传送给服务器
  9. 这个时候,中间人自己已经有了对称加密密钥。就已经可以掌握两方的通信内容了。

3. SSL Pinning

​ 如何防范中间人攻击呢? 可以采用SSL Pinning。也就是将服务器提供的证书内置到app中,当客户端发起请求时,可以通过对比内置的证书和服务器证书内容,以验证服务器证书。

3.1 证书锁定和公钥锁定

证书锁定

​ 将APP代码内置为仅接受指定域名的证书,不接受系统或者浏览器内置的CA证书。通过这种方式,即可保障APP与服务端通信的唯一性和安全性。但是证书过期了的话app内置的也需要相应更换。

公钥锁定

​ 提取服务器证书的公钥并内置到移动端APP中,通过公钥值对比来保证连接的安全性。这样证书更新了也不用换密钥对,可以解决证书过期需要更新的问题。

3.2 绕过ssl pinning

​ 可以使用Frida把自己创建的TrustManager作为参数塞给SSLcontext.init,或者把相关的校验api的返回值给hook掉,就能干掉ssl pinning校验了。如果是双向认证的话,还需要提取app中内置的证书。