【Android】HTTPS“中间人攻击”分析与防御

一、HTTPS的作用

1、 认证服务端与服务器,确保相互之间的信任关系。

2、 加密数据,防止泄露。

3、 验证数据完整性,防止篡改。

二、 HTTPS工作原理

我们这里所关注的Https工作原理,主要指的是SSL协议的握手流程;

HTTP +加密+认证+完整性保护=HTTPS;

HTTPS是身披SSL外壳的HTTP;HTTPS并非是应用层的一种新协议,而是HTTP通信接口部分用SSL协议代替,通信时,HTTP先和SSL通信,再由SSL与TCP通信。

HTTPS采用对称加密和非对称加密两种加密机制,首先使用非对称加密方式(数字证书)完成对称加密密钥的交换,然后再使用对称密钥加密报文并发送。

非对称加密:一个私钥一个公钥,公钥可以随意发布,公钥加密的密文,可以使用私钥解密;公钥本身几乎无法解密密文。所以安全性高,但是加解密效率低。

对称加密:只有一把密钥,可以加密和解密,在传输时被截获的话,就没有安全性可言了;所以安全性低,但是加解密效率高。

下面是HTTPS通信流程:

在这里插入图片描述

三、 中间人攻击

从HTTPS的工作原理,可以看出HTTPS极好的安全性;但是这种安全性不是绝对的,“中间人攻击”可以很轻易的攻破HTTPS的安全防护,如在用户设备上安装证书(将中间人服务器的证书放到设备的信任列表中)进行中间人攻击;

下面我们来分析“中间人攻击”一般都做了什么,如下图所示,“中间人攻击”的攻击者在网络中拦截客户端的请求,窃取篡改后发送给服务端,并将服务端返回的数据拦截窃取篡改后返回给客户端,即对客户端伪装成服务端,对服务端伪装成客户端。

实现“中间人攻击”的关键点是,攻击者如何绕过客户端的数字证书验证;分析Charles和其他抓包工具的抓包情况,可以分析一种实现方式,在设备上安装并信任攻击者证书,攻击者拦截到客户端的请求后,将自己的数字证书发送给客户端,客户端收到数字证书后,会用内置的数字证书认证机构的公开密钥和设备安装并信任的证书列表验证收到的数字证书,这里是关键,如果攻击者发送过来的证书已安装在设备信任列表中,那么客户端验证就会通过,客户端会认为对方就是正确的服务端,于是发送对称密钥给服务端,这样攻击者就成功实现了“中间人攻击”。

在这里插入图片描述

四、 防御“中间人攻击”

通过上面对“中间人攻击”的分析,要防御“中间人攻击”,重点是不能让攻击者骗过客户端的数字证书验证,常见措施:

1、单向验证

单向验证也是使用自签名证书常用的证书验证方式,即在APP中预埋公钥证书A_public(对应服务端使用私钥证书A_privite),并直接用预埋的证书来生成TrustManger进行证书验证。在进行验证数字证书时,使用内置的数字证书对其进行验证,这样就算设备中安装并信任了攻击者的数字证书,也无法通过验证,进而确保只有真正的服务端返回的数字证书才能验证通过;

Android下实现代码:

// Load CAs from an InputStream
// (could be from a resource or ByteArrayInputStream or ...)
CertificateFactory cf = CertificateFactory.getInstance("X.509");
// From https://www.washington.edu/itconnect/security/ca/load-der.crt
InputStream caInput = new BufferedInputStream(new FileInputStream("load-der.crt"));
Certificate ca;
try {
   
    ca = cf.generateCertificate(caInput);
    System.out.println("ca=" + ((X509Certificate) ca).getSubjectDN
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值