深入理解HTTPS协议,字节跳动安卓开发面试题

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

到这里,相信有基础的同学应该都回忆起来这是怎么回事了。我不做过多解释,直接上工具wireshark。 我们随便输入一个http的地址(注意不要访问https的,有些网站比如bat这种大网站你输入http也会直接转成https所以我们还是 随便选个小网站确保是http的)

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

然后明显能看出来是吧,有三次tcp的过程,然后才是http的链接。

细致分析下这个三次握手的过程:

第一次握手:主机A发送位码为syn=1,随机产生seq number=0的数据包到服务器,主机B由SYN=1知道,A要求建立联机;

第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=0的包

第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。

完成三次握手,主机A与主机B开始传送数据。

有的人可能会问,seq number不是随机number吗,你这里怎么都是0啊。

点开详细:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

这里面告诉你了 是相对数字,方便你看。你当然可以选择看实际数字 加深理解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在这个里面把相对数字选项勾选掉,就可以看到真实的seq number了

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

怎么样这里是不是就豁然开朗了,当然明白就好,平时最好还是勾选这个选项这样理解的快一点。

对称加密和非对称加密

这也是理解https的重要基础之一。这里涉及到很多复杂的算法,我并不精通算法和密码学,所以这里不讲的太细。你们只要知道个大概即可:

对称加密:加密和解密都用一个密钥,有点是速度快。缺点吗,显而易见的是 双方要用这个通信的话 必须得把密钥告知对方, 但是这个密钥一旦被截获了,就可以随便decode出来明文。实际上不够安全。

非对称加密:有一对密钥,即有公钥也有私钥。公钥随便发,私钥不会发出去 各自保管。用一个加密的话,解密就只能用另外一个。比如你向银行请求一个公钥,银行把公钥发给你,你用公钥加密一条信息以后 再发给银行,然后银行用私钥解密信息。这个过程就算有人拿到公钥,但是因为非对称加密用一个加密 只能用另外一个解密,所以 拿到这公钥也没用,因为无法使用公钥解密,能解密的私钥还在银行那里,银行当然不会传出去,所以非对称加密很安全。 但是这种非对称加密非常消耗资源,速度极慢,所以要有限使用。不能无节制使用。

HASH加密算法:这个就好像MD5这样的加密方式,是不可逆的。

确保安全通信的三个原则

A.数据内容的加密

这个很好理解是吧,敏感信息肯定要加密的,明文传输等于自杀。不过多解释了。

B.通讯双方的身份校验

这个很多人不理解,这是啥意思,按道理说我们用非对称加密应该就完美了啊。但是谨记我们的数据包不是从A直接到B的。 中间要经过无数次的路由器转发等等,这个中间一旦有人截获了我们的数据包,换成自己的数据包,就很危险了。 所以我们还需要一种机制能校验通讯双方的身份。确保我是在和我老婆说话 而不是在我和丈母娘说话。

C.数据内容的完整性

这个也不是很容易理解,按道理说TCP是能保证数据有序完整的到达对方的。但是不要忘记中间我们经过的无数次路由器转发, 可能被劫持,被劫持以后可能会对数据包进行篡改,这个时候我们需要一种机制保护我们的数据不被篡改,即使被篡改 也能被我们察觉,确保我对我老婆写的信能完整的让我老婆看到,而不是只看到一半。

https的设计思路

根据前面我们阐述的加密算法和安全通信三原则,为了保证我们的通信能够安全进行,可以试想出一种流程来保证通信安全:

  • 服务器为每个客户端生成一个公钥,将公钥发送给客户端
  • 客户端选择一个加密算法,然后用公钥加密以后发送给服务器
  • 服务器收到这个公钥加密后的算法以后拿自己的私钥解密,然后就知道这个加密算法是哪个了。今后就一直用这个算法通信。

目前来看,这个思路是不是很完美。公钥即使被中间人截获以后也没用,因为拿到公钥也解密不出来到底双方是用哪种算法加密的。 但有个重大缺陷:

中间人可以将服务器发送的公钥包进行掉包,客户端怎么知道这个公钥是真的服务器发送的还是假的中间人给的非法公钥呢?

可以看这张图,基本上中间人攻击就是这个图所示的意思。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

解决中间人攻击问题

这个问题的解决办法其实也很粗暴:

  • 使用权威的第三方机构也就是CA向安全的服务器颁发证书。来证明这台服务器的合法性。
  • 服务器通过这个证书来把自己的公钥加密以后发给客户端
  • 客户端收到这个加密后的公钥以后 ,就用第三方机构的公钥 把这个服务器返回的加密后的公钥 解密 从而得到真正的服务器 的公钥

带来的问题:

客户端到哪去取第三方公钥?

  • 你的操作系统或者浏览器自身就带有权威机构的第三方公钥

  • 如果中间人得到CA认证怎么办?这种情况基本没办法处理,如果发生,那么这个CA下面所有的证书都被认为非法了。所以 CA审核也很严格啊

CA证书是收费的啊,我不想交钱咋办呢

可以自己制作证书,然后把这个证书的公钥放在客户端(例如app的安装目录下),这样app只要使用自己的证书公钥即可 解密了,不需要使用系统的。但是这样带来的问题是,如果有人获取到了你这个公钥证书咋办? 数字签名认证算法即可保证此类问题,其实简单来说就是服务器和客户端事先约定好一种加密规则即可,就可以得知是否被篡改。 这部分由于不是重点,暂时不讲的太细,只要知道有这么个事即可。实际上你弄懂整个https以后这个地方就自然而然也能 想明白了。

有了上述基础,我们终于可以按照科班的方式来理解HTTPS真正的流程

为什么HTTPS的流程要放在最后再讲,因为放在前面讲,根本不会理解为啥要这么做,很快就会忘记。有了前面的基础 再来看这个流程,就会恍然大悟。

学习宝典

对我们开发者来说,一定要打好基础,随时准备战斗。不论寒冬是否到来,都要把自己的技术做精做深。虽然目前移动端的招聘量确实变少了,但中高端的职位还是很多的,这说明行业只是变得成熟规范起来了。竞争越激烈,产品质量与留存就变得更加重要,我们进入了技术赋能业务的时代。

不论遇到什么困难,都不应该成为我们放弃的理由!

很多人在刚接触这个行业的时候或者是在遇到瓶颈期的时候,总会遇到一些问题,比如学了一段时间感觉没有方向感,不知道该从那里入手去学习,对此我针对Android程序员,我这边给大家整理了一套学习宝典!包括不限于高级UI、性能优化、移动架构师、NDK、混合式开发(ReactNative+Weex)微信小程序、Flutter等全方面的Android进阶实践技术;希望能帮助到大家,也节省大家在网上搜索资料的时间来学习,也可以分享动态给身边好友一起学习!

Android学习PDF+架构视频+面试文档+源码笔记

【Android核心高级技术PDF文档,BAT大厂面试真题解析】

【算法合集】

【延伸Android必备知识点】

【Android部分高级架构视频学习资源】

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频**
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
[外链图片转存中…(img-VFvpOpsv-1711020612998)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值