😀大家好,我是白晨,一个不是很能熬夜😫,但是也想日更的人✈。如果喜欢这篇文章,点个赞👍,关注一下👀白晨吧!你的支持就是我最大的动力!💪💪💪
文章目录
📗前言
前面的文章我们已经介绍了HTTP协议(对于HTTP还不太了解的同学可以先去学习HTTP协议),但是如果你现在经常上网,你就会发现很多协议的前面都是https
,而不是http
。
https://blog.csdn.net/baichendada/article/details/126925361
上面就是一个常见的博客链接,可以看到,CSDN使用的就是HTTPS协议,那么为什么现在很多企业都会选则使用HTTPS协议,HTTPS和HTTP协议有什么相同点和不同点,HTTPS协议又好在哪里呢?
以上问题,我将会在下面详细展开说明,相信阅读完这篇文章,你会对应用层协议有更深一层的认识。
📘HTTPS协议
♟️1. HTTP协议的弊端
HTTP由于它的简洁快速而被广泛使用,但是简洁快速也意味着功能上的不完善。HTTP协议有三大弊病阻碍了HTTP协议的发展。
- 通信时使用明文,可能被窃听
- HTTP协议不会验证通信方身份
- 无法证明报文的完成性,无法判断报文是否已遭到篡改
🃏2. HTTPS相关知识
2.1 加密解密相关知识
- 对称加密
我们可以使用对称加密对HTTPS报文进行加密,这样就可以保证传输时,即使被中间人窃取,其中的内容也不会泄露。
但是对称加密有一个很大的弊端,就是密钥一旦被中间人获取,那么一切信息都将会被窃取。你可能会说,那我让密钥不泄露不就可以了?
真的会这么简单吗?试想一下你正在和一个网站进行通信,如果要让中间人拿不到密钥,那么密钥肯定不能是公开的。一般来说,每个网站都会有自己的加密机制,所以我们首先要拿到这个密钥。这就出现了一个很严重的问题,密钥该如何在网络上进行传输。如果使用明文传输,那么密钥很容易就会被获取,后面的加密对于中间人相当于透明;如果服务端一开始使用密钥加密,那么客户端根本就解密不了,就成了蛋生鸡、鸡生蛋的问题。
所以,单独的对称加密是无法做到传输信息安全的。
- 非对称加密
这种方式就可以解决第一次通信的问题,客户可以通过公钥对报文进行加密,服务端会通过私钥进行解密,这样就可以获取到用户的信息。那么,用户如何解密服务器的报文呢?或者说非对称加密只实现了单向安全,如何才能保证双方通信安全呢?
这个问题白晨会在后续展开,接着继续探索吧。(点击跳转到答案)
2.2 数据签名
- 数据摘要
简单来说,数字摘要就是通过对一串数据进行Hash散列处理,使其生成一串固定长度的字符串。
- 数据签名
HTTP不能验证报文的完整性和判断报文是否被修改,如果使用数据签名,客户端将要发送的明文通过Hash散列和加密算法生成对应的数据签名,将要发送的明文加密后和数据签名一起发送,服务端通过解密算法拿到明文以及数据摘要(数据签名解密以后就是数据摘要),服务端通过同样的Hash散列算法对明文求其数据摘要。如果两个摘要相等,说明报文完整,未被篡改过,反之,说明数据不完整或者被篡改了。
2.3 数字证书
有了数字证书就可以验证对方的身份并且可以拿到对方放出的加密公钥。那么,拿到对面证书的时候,如何保证他不是伪造的或者是被篡改过的呢?
证书内容中含有证书本身的数字签名
以及签名所用到的Hash算法
,验证时,证书的明文经过Hash算法得到数字摘要,数字签名用数字证书认证机构的公开密钥(提前获得)进行解密得到数字摘要,两个数字摘要进行对比,相同则证书完整。
2.4 SSL/TSL
HTTP协议是直接和TCP/IP协议打交道的,这样的话安全性得不到保证,为了让HTTP协议具有安全的特性,让HTTP协议先通过SSL协议,进行加密、认证、验证完整性,保证HTTP的安全性,再让SSL协议和TCP/IP打交道,这样就能保证数据安全。
用一张图来简单理解SSL协议基本结构:
在正式讲解HTTPS协议之前,必须先讲一下SSL协议的握手过程。
- SSL握手过程
首先要解释一下什么是握手,类似于两个人初识,会相互问对方是哪里人,工作是什么等,客户端和服务端打交道的时候必须先沟通双方使用的编码格式,使用的加密算法等,这样相互交换基本信息,为接下来通信确定通信方式的过程就叫做握手。
握手过程一共分为5步:
上述过程关于密钥有三点值得注意:
这里要特别注意:握手阶段的通信都是明文的,如果有中间人进行抓包,就可以知道双方选择的加密方式,所以,第一个和第二个随机数是很容易被获取的。因此,加密的关键就在了第三个随机数(Premaster secret)上,这个随机数传输使用了非对称加密,所以几乎是不可能被获取的,这样也就保障了通信安全。
- SSL的劣势
- SSL具体通信过程
🪅3. HTTPS协议
以上定义来自于百度百科,简单的理解就是 HTTPS
就是套了一层 SSL
壳的 HTTP
。在讲解HTTPS相关知识的时候,我发现好像基本上HTTPS协议能讲的细节知识都讲好像都已经讲了。所以接下来,白晨就把HTTPS的整体框架串一遍。
3.1 HTTPS是披着SSL外壳的HTTP
3.2 HTTPS采用混合加密机制
H T T P 耗时 = T C P 握手 + 通信时间 H T T P S 耗时 = T C P 握手 + S S L 握手 + 通信时间 + 加密解密耗时 HTTP耗时 = TCP握手 + 通信时间\\ HTTPS耗时 = TCP握手 + SSL握手 + 通信时间 + 加密解密耗时 HTTP耗时=TCP握手+通信时间HTTPS耗时=TCP握手+SSL握手+通信时间+加密解密耗时
可以看到HTTPS由于要通过SSL进行安全保障,需要消耗大量时间,并且非对称加密要比对称加密要更加耗费时间。所以,应充分利用两者各自的优势, 将多种方法组合起来用于通信。
在交换密钥环节使用公开密钥加密方式, 之后的建立通信交换报文阶段则使用共享密钥加密方式。
- HTTPS能完全取代HTTP吗?
既然HTTPS这么安全,那么我们可以直接放弃使用HTTP吗?
答案是不能,HTTPS的安全是建立在牺牲了效率的基础之上的,HTTPS平均会比HTTP协议慢上2~100倍,这对于本来就要处理大量请求的服务器是致命的。
所以,一般在传输私密信息的时候使用HTTPS协议,而在传输非敏感信息时使用HTTP协议传输,这样就能最大化HTTP和HTTPS各自的优势。
3.3 HTTPS证书
🪆4. HTTPS通信机制
用一幅图来具体地展示这个过程:
📙后记
本篇文章详细地讲解了HTTPS协议、加密解密相关知识、数字签名、数字证书、SSL/TSL等相关知识,其中概念性的知识比较多,涉及到的知识面也比较广。白晨也是参考了许多书籍和博客,画了不少图片以便于大家第一次接触这些陌生概念时不会这么难以接受。当然,对于如SSL/TSL、以及加密算法等知识,白晨并没有将其展开,有兴趣了解的朋友们可以自己查资料学习。
我们是从上到下讲解TCP/IP模型的,前三篇网络文章已经将应用层的代表协议和使用讲解完毕,下一篇文章,白晨将会分享传输层的代表协议TCP协议,通过了解TCP协议,你会对HTTP通信以及报文传输有一个更深层的理解。
- 参考书籍及博客:
如果讲解有不对之处还请指正,我会尽快修改,多谢大家的包容。
如果大家喜欢这个系列,还请大家多多支持啦😋!
如果这篇文章有帮到你,还请给我一个大拇指
👍和小星星
⭐️支持一下白晨吧!喜欢白晨【网络】系列的话,不如关注
👀白晨,以便看到最新更新哟!!!
我是不太能熬夜的白晨,我们下篇文章见。