网络协议栈--应用层--HTTPS协议,零基础也能看得懂

一、HTTPS协议原理

1.1 HTTPS协议是什么?

HTTPS也是⼀个应⽤层协议.是在HTTP协议的基础上引⼊了⼀个加密层。
HTTP协议内容都是按照⽂本的⽅式明⽂传输的,这就导致在传输过程中出现⼀些被篡改的情况。

1.2 概念准备

1.2.1 什么是“加密”?

加密就是把明⽂(要传输的信息)进行⼀系列变换,⽣成密⽂的过程。
解密就是把密⽂再进⾏⼀系列变换,还原成明⽂的过程。
在这个加密和解密的过程中,往往需要⼀个或者多个中间的数据,辅助进⾏这个过程,这样的数据称为密钥(正确发⾳yue四声,不过⼤家平时都读作yao四声)。

83版<<⽕烧圆明园>>,有⼈要谋反⼲掉慈禧太后.恭亲王奕䜣给慈禧递的折⼦,折子内容只是扯⼀扯家常,套上⼀张挖了洞的纸就能看到真实要表达的意思。
明⽂:“当⼼肃顺,端华,戴恒”(这⼏个⼈都是当时的权⾂,后来被慈禧⼀锅端)。
密⽂:奏折全⽂。
密钥:有洞的纸。
在这里插入图片描述

在这里插入图片描述
加密解密到如今已经发展成⼀个独⽴的学科:密码学。
⽽密码学的奠基⼈,也正是计算机科学的祖师爷之⼀,艾伦·⻨席森·图灵。
在这里插入图片描述
对⽐我们另⼀位祖师爷冯诺依曼:
在这里插入图片描述
图灵⼤佬年少有为,不光奠定了计算机,⼈⼯智能,密码学的基础,并且在⼆战中⼤破德军的Enigma机,使盟军占尽情报优势,才能扭转战局反败为胜,但是因为⼀些原因,图灵⼤佬遭到英国皇室的迫害,41岁就英年早逝了。
计算机领域中的最⾼荣誉就是以他名字命名的"图灵奖"。

1.2.2 为什么要加密?

中间人劫持:
由于我们通过⽹络传输的任何的数据包都会经过运营商的⽹络设备(路由器,交换机等)。那么运营商的⽹络设备就可以解析出你传输的数据内容,并进⾏篡改。
例如点击"下载按钮"下载一个东西,其实就是在给服务器发送了⼀个HTTP请求,获取到的HTTP响应其实就包含了该APP的下载链接。中间人劫持之后,就发现这个请求是要下载天天动听,那么就⾃动的把交给用户的响应给篡改成"QQ浏览器"的下载地址了,然后我们就会下载了QQ浏览器了。
在这里插入图片描述

所以:因为http的内容是明⽂传输的,明⽂数据会经过路由器、wifi热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双⽅察觉,这就是 中间⼈ 攻击 ,所以我们才需要对信息进⾏加密。
思考下,为啥中间人要进⾏劫持?
在这里插入图片描述
所以所有的其他的⿊客也可以⽤类似的⼿段进⾏劫持,来窃取⽤⼾隐私信息,或者篡改内容。
试想⼀下,如果⿊客在用户登陆⽀付宝的时候获取到用户账户余额,甚⾄获取到用户的⽀付密码…
在互联⽹上,明⽂传输是⽐较危险的事情!!!
HTTPS就是在HTTP的基础上进⾏了加密,进⼀步的来保证用户的信息安全的哦~~

1.2.3 常见的加密方式
1.2.3.1 对称加密

采⽤单钥密码系统的加密⽅法,同⼀个密钥可以同时⽤作信息的加密和解密,这种加密⽅法称为对称加密,也称为单密钥加密,特征:加密和解密所⽤的密钥是相同的。

常⻅对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等。
特点:算法公开、计算量⼩、加密速度快、加密效率⾼。
对称加密其实就是通过同⼀个"密钥",把明⽂加密成密⽂,并且也能把密⽂解密成明⽂.
⼀个简单的对称加密,按位异或。
假如3是数据,5是密钥,3^5=6,所以6是密文。
在这里插入图片描述
6是密文,5是密钥,所以6^5=3
在这里插入图片描述
当然,按位异或只是最简单的对称加密,HTTPS中并不是使⽤按位异或的。

1.2.3.2 非对称加密

• 需要两个密钥来进⾏加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
• 常⻅⾮对称加密算法(了解):RSA,DSA,ECDSA。
• 特点:算法强度复杂、安全性依赖于算法与密钥,但是由于其算法复杂,⽽使得加密解密速度没有对称加密解密的速度快。
⾮对称加密要⽤到两个密钥:⼀个叫做"公钥",⼀个叫做"私钥"。
公钥和私钥是配对的,最⼤的缺点就是运算速度⾮常慢,⽐对称加密要慢很多。

• 通过公钥对明⽂加密,变成密⽂
• 通过私钥对密⽂解密,变成明⽂
也可以反着⽤
• 通过私钥对明⽂加密,变成密⽂
• 通过公钥对密⽂解密,变成明⽂

⾮对称加密的数学原理比较复杂,涉及到⼀些数论相关的知识.

这⾥举⼀个简单的生活上的例⼦:
A要给B⼀些重要的⽂件,但是B可能不在,于是A和B提前做出约定如下:
B说:我桌⼦上有个盒⼦,然后我给你⼀把锁,你把⽂件放盒⼦⾥⽤锁锁上,然后我回头拿着钥匙来开锁取⽂件。
在这个场景中,这把锁就相当于公钥,钥匙就是私钥,公钥给谁都⾏(不怕泄露),但是私钥只有B⾃⼰持有,持有私钥的⼈才能解密。

1.2.4 数据摘要&&数据指纹

数字指纹(数据摘要),其基本原理是利⽤单向散列函数(Hash函数)对信息进⾏运算,⽣成⼀串固定⻓度的数据摘要。数字指纹并不是⼀种加密机制,但可以⽤来判断数据有没有被窜改。

摘要常⻅算法:有MD5、SHA1、SHA256、SHA512等,算法把⽆限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率⾮常低)

摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不过从摘要很难反推原信息,通常⽤来进⾏数据对⽐。

1.2.5 数字签名

摘要经过加密,就得到数字签名(后⾯会细说)

1.2.6 理解链-承上启下

• 对http进⾏对称加密,是否能解决数据通信安全的问题?问题是什么?
• 为何要⽤⾮对称加密?为何不全⽤⾮对称加密?

1.3 HTTPS的工作过程探究

既然要保证数据安全,就需要进⾏"加密"。
⽹络传输中不再直接传输明⽂了,⽽是加密之后的"密⽂"。
加密的⽅式有很多,但是整体可以分成两⼤类:对称加密和⾮对称加密。

1.3.1 方案一:只使用对称加密

如果通信双⽅都各⾃持有同⼀个密钥X,且没有别⼈知道,这两⽅的通信安全当然是可以被保证的(除⾮密钥被破解)
在这里插入图片描述
引⼊对称加密之后,即使数据被截获,由于⿊客不知道密钥是啥,因此就⽆法进⾏解密,也就不知道请求的真实内容是啥了。
但事情没这么简单,服务器同⼀时刻其实是给很多客户端提供服务的,这么多客户端,每个⼈⽤的秘钥都必须是不同的(如果是相同那密钥就太容易扩散了,⿊客就也能拿到了),因此服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很⿇烦的事情~

在这里插入图片描述
⽐较理想的做法就是能在客⼾端和服务器建⽴连接的时候,双方协商确定这次的密钥是啥。
在这里插入图片描述

但是如果直接把密钥明⽂传输,那么⿊客也就能获得密钥了~~此时后续的加密操作就形同虚设了。

因此密钥的传输也必须加密传输!
但是要想对密钥进⾏对称加密,就仍然需要先协商确定⼀个"密钥的密钥",这就成了"先有鸡还是先有蛋"的问题了,此时密钥的传输再⽤对称加密就行不通了。

1.3.2 方案二:只使用非对称加密

鉴于⾮对称加密的机制,如果服务器先把公钥以明⽂⽅式传输给浏览器,之后浏览器向服务器传数据前都先⽤这个公钥加密好再传,从客户端到服务器信道似乎是安全的(有安全问题),因为只有服务器有相应的私钥能解开公钥加密的数据。

但是服务器到浏览器的这条路怎么保障安全?

如果服务器⽤它的私钥加密数据传给浏览器,那么浏览器⽤公钥可以解密它,⽽这个公钥是⼀开始通过明⽂传输给浏览器的,若这个公钥被中间⼈劫持到了,那他也能⽤该公钥解密服务器传来的信息了。

1.3.3 方案三:双方都使用非对称加密
  1. 服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C’
  2. 客户和服务端交换公钥
  3. 客户端给服务端发信息:先⽤S对数据加密,再发送,只能由服务器解密,因为只有服务器有私钥S’
  4. 服务端给客户端发信息:先⽤C对数据加密,再发送,只能由客户端解密,因为只有客户端有私钥C’

这样貌似也⾏啊,但是:
• 效率太低。
• 依旧有安全问题

在这里插入图片描述

1.3.4 方案四:使用对称加密+非对称加密

先解决效率问题:

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

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

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

sdn.net/forums/4304bb5a486d4c3ab8389e65ecb71ac0)

AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值