写点什么

字节一面:https- 真的安全吗?可以抓包吗,分享一点面试小经验

用户头像
Android架构
关注
发布于: 刚刚
  1. 对称加密效率比较高

  2. 一对公私钥只能实现单向的加解密。只有服务端保存了私钥。如果使用非对称机密,相当于客户端必须有自己的私钥,这样设计的话,每个客户端都有自己的私钥,这很明显是不合理的,因为私钥是需要申请的。

https 是绝对安全的吗

不是绝对安全的,可以通过中间人攻击。

什么是中间人攻击

中间人攻击是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。


HTTPS 使用了 SSL 加密协议,是一种非常安全的机制,目前并没有方法直接对这个协议进行攻击,一般都是在建立 SSL 连接时,拦截客户端的请求,利用中间人获取到 CA 证书、非对称加密的公钥、对称加密的密钥;有了这些条件,就可以对请求和响应进行拦截和篡改。



过程原理:


  1. 本地请求被劫持(如 DNS 劫持等),所有请求均发送到中间人的服务器

  2. 中间人服务器返回中间人自己的证书

  3. 客户端创建随机数,通过中间人证书的公钥对随机数加密后传送给中间人,然后凭随机数构造对称加密对传输内容进行加密传输

  4. 中间人因为拥有客户端的随机数,可以通过对称加密算法进行内容解密

  5. 中间人以客户端的请求内容再向官方网站发起请求

  6. 因为中间人与服务器的通信过程是合法的,官方网站通过建立的安全通道返回加密后的数据

  7. 中间人凭借与官方网站建立的对称加密算法对内容进行解密

  8. 中间人通过与客户端建立的对称加密算法对官方内容返回的数据进行加密传输

  9. 客户端通过与中间人建立的对称加密算法对返回结果数据进行解密


由于缺少对证书的验证,所以客户端虽然发起的是 HTTPS 请求,但客户端完全不知道自己的网络已被拦截,传输内容被中间人全部窃取。

https 是如何防止中间人攻击的

在 https 中需要证书,证书的作用是为了防止"中间人攻击"的。 如果有个中间人 M 拦截客户端请求,然后 M 向客户端提供自己的公钥,M 再向服务端请求公钥,作为"中介者" 这样客户端和服务端都不知道,信息已经被拦截获取了。这时候就需要证明服务端的公钥是正确的.


怎么证明呢?


就需要权威第三方机构来公正了.这个第三方机构就是 CA. 也就是说 CA 是专门对公钥进行认证,进行担保的,也就是专门给公钥做担保的担保公司。 全球知名的 CA 也就 100 多个,这些 CA 都是全球都认可的,比如 VeriSign、GlobalSign 等,国内知名的 CA 有 WoSign。

浏览器是如何确保 CA 证书的合法性?

一、证书包含什么信息?


颁发机构信息、公钥、公司信息、域名、有效期、指纹......


二、证书的合法性依据是什么?


首先,权威机构是要有认证的,不是随便一个机构都有资格颁发证书,不然也不叫做权威机构。另外,证书的可信性基于信任制,权威机构需要对其颁发的证书进行信用背书,只要是权威机构生成的证书,我们就认为是合法的。所以权威机构会对申请者的信息进行审核,不同等级的权威机构对审核的要求也不一样,于是证书也分为免费的、便宜的和贵的。


三、浏览器如何验证证书的合法性?


浏览器发起 HTTPS 请求时,服务器会返回网站的 SSL 证书,浏览器需要对证书做以下验证:


  1. 验证域名、有效期等信息是否正确。证书上都有包含这些信息,比较容易完成验证;

  2. 判断证书来源是否合法。每份签发证书都可以根据验证链查找到对应的根证书,操作系统、浏览器会在本地存储权威机构的根证书,利用本地根证书可以对对应机构签发证书完成来源验证;

  3. 判断证书是否被篡改。需要与 CA 服务器进行校验;

  4. 判断证书是否已吊销。通过 CRL(Certificate Revocation List 证书注销列表)和 OCSP(Online Certificate Status Protocol 在线证书状态协议)实现,其中 OCSP 可用于第 3 步中以减少与 CA 服务器的交互,提高验证效率。


以上任意一步都满足的情况下浏览器才认为证书是合法的。

https 可以抓包吗

HTTPS 的数据是加密的,常规下抓包工具代理请求后抓到的包内容是加密状态,无法直接查看。


但是,我们可以通过抓包工具来抓包。它的原理其实是模拟一个中间人。


通常 HTTPS 抓包工具的使用方法是会生成一个证书,用户需要手动把证书安装到客户端中,然后终端发起的所有请求通过该证书完成与抓包工具的交互,然后抓包工具再转发请求到服务器,最后把服务器返回的结果在控制台输出后再返回给终端,从而完成整个请求的闭环。


关于 httpps 抓包的原理可以看这一篇文章。


Android平台HTTPS抓包解决方案及问题分析


有人可能会问了,既然 HTTPS 不能防抓包,那 HTTPS 有什么意义?


HTTPS 可以防止用户在不知情的情况下通信链路被监听,对于主动授信的抓包操作是不提供防护的,因为这个场景用户是已经对风险知情。要防止被抓包,需要采用应用级的安全防护,例如采用私有的对称加密,同时做好移动端的防反编译加固,防止本地算法被 pojie。

扩展

如何防止抓包?

对于 HTTPS API 接口,如何防止抓包呢?既然问题出在证书信任问题上,那么解决方法就是在我们的 APP 中预置证书。在 TLS/SSL 握手时,用预置在本地的证书中的公钥校验服务器的数字签名,只有签名通过才能成功握手。由于数字签名是使用私钥生成的,而私钥只掌握在我们手上,中间人无法伪造一个有效的签名,因此攻击失败,无法抓包。


同时,为了防止预置证书被替换,在证书存储上,可以将证书进行加密后进行「嵌入存储」,如嵌入在图片中或一段语音中。这涉及到信息隐写的领域,这个话题我们有空了详细说。


关于 Android 中 Https 请求如何防止中间人攻击和 Charles 抓包,可以看一下这一篇文章。


Android中Https请求如何防止中间人攻击和Charles抓包原理

预置证书/公钥更新问题

这样做虽然解决了抓包问题,但是也带来了另外一个问题:我们购买的证书都是有有效期的,到期前需要对证书进行更新。主要有两种方式:


提供预置证书更新接口。在当前证书快过期时,APP 请求获取新的预置证书,这过渡时期,两个证书同时有效,直到安全完成证书切换。这种方式有一定的维护成本,且不易测试。 在 APP 中只预埋公钥,这样只要私钥不变,即使证书更新也不用更新该公钥。但是,这样不太符合周期性更新私钥的安全审计需求。一个折中的方法是,一次性预置多个公钥,只要任意一个公钥验证通过即可。考虑到我们的证书一般购买周期是 3-5 年,那么 3 个公钥,可以使用 9-15 年,同时,我们在此期间还可以发布新版本废弃老公钥,添加新公钥,这样可以使公钥一直更新下去。


原文链接:https://juejin.im/post/5f1072eb6fb9a07e6d70c445

未完待续。。。

后续会持续更新字节跳动等大厂面试真题,备战金九银十,为你保驾护航!喜欢的话麻烦点击一个喜欢关注一下哦~





更新

一个月前答应大伙的备战金九银十,大厂面试真题来啦!


这份资料我从春招开始,就会将各博客、论坛。网站上等优质的 Android 开发中高级面试题收集起来,然后全网寻找最优的解答方案。每一道面试题都是百分百的大厂面经真题+最优解答。包知识脉络 + 诸多细节。节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习。给文章留个小赞,就可以免费领取啦~


戳我领取:Android对线暴打面试指南超硬核Android面试知识笔记3000页Android开发者架构师核心知识笔记


《960 全网最全 Android 开发笔记》



<meta charset="utf-8">


《379 页 Android 开发面试宝典》


包含了腾讯、百度、小米、阿里、乐视、美团、58、猎豹、360、新浪、搜狐等一线互联网公司面试被问到的题目。熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率。


如何使用它?1.可以通过目录索引直接翻看需要的知识点,查漏补缺。2.五角星数表示面试问到的频率,代表重要推荐指数



《507 页 Android 开发相关源码解析》


只要是程序员,不管是 Java 还是 Android,如果不去阅读源码,只看 API 文档,那就只是停留于皮毛,这对我们知识体系的建立和完备以及实战技术的提升都是不利的。


真正最能锻炼能力的便是直接去阅读源码,不仅限于阅读各大系统源码,还包括各种优秀的开源库。


![](//upload-images.jianshu.io/upload_images/22857658-f9659b


《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
浏览器打开:qq.cn.hn/FTe 免费领取
复制代码


f14efd90fe.png?imageMogr2/auto-orient/strip|imageView2/2/w/1200/format/webp)


腾讯、字节跳动、阿里、百度等 BAT 大厂 2019-2020 面试真题解析



资料已经上传在我的GitHub,或者关注后简信我【666】即可领取(无偿)。


资料收集不易,如果大家喜欢这篇文章,或者对你有帮助不妨多多点赞转发关注哦。文章会持续更新的。绝对干货!!!

用户头像

Android架构

关注

还未添加个人签名 2021.10.31 加入

还未添加个人简介

评论

发布
暂无评论
字节一面:https-真的安全吗?可以抓包吗,分享一点面试小经验