https了解

116 阅读12分钟

1. 为什么需要HTTPS?

HTTPS 是安全版的 HTTP。

HTTP 协议在传输数据时采用的是明⽂方式传递,因此,⼀些敏感信息的传输就变得很不安全。

而 HTTPS 就是为了解决 HTTP 的不安全⽽产⽣的。

2. HTTPS是如何保证安全的?

HTTPS 在传输数据的过程中会对数据进行加密处理,保证安全性。

那HTTPS采用的什么样的加密方式呢?我们来了解下一些加密的基本概念。

目前常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。

2.1 什么是对称加密?

简单来说:通信的双⽅都使⽤同⼀个秘钥进⾏加解密。⽐如,两个人事先约定的暗号,就属于对称加密。

image.png 对称加密的特点是:

  • 优点:

    计算量小、加密速度快、加密效率高。

  • 缺点:

    在数据传送前,发送方和接收方必须商定好秘钥,然后双方保存好秘钥。 如果一方的秘钥被泄露,那么加密信息也就不安全了

使用场景:本地数据加密、https通信、网络传输等

常见算法:AES、DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6

2.1 什么是⾮对称加密?

通信的双方使用不同的秘钥进行加密解密,也就是两把密钥,即秘钥对(私钥 + 公钥)。

特征: 私钥可以解密公钥加密的内容, 公钥可以解密私钥加密的内容,他是对称和非对称的结合

image.png 非对称加密的特点是:

  • 优点:非对称加密与对称加密相比其安全性更好
  • 缺点:加密和解密花费时间长、速度慢,只适合对少量数据进行加密。

使用场景:https会话前期、CA数字证书、信息加密、登录认证等

常见算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

2.1 什么是⾮对称加密?

3 HTTPS 加密解决⽅案

结合了两种加密⽅式:

  • 对称加密的密钥 ⽤非对称加密的公钥, 进⾏加密并发送出去,接收⽅使⽤私钥解密得到 对称加密密钥
  • 双⽅沟通时使⽤ 对称加密密钥 进⾏

可以看到,只有在发送秘钥阶段才使用非对称加密,而后续的通信都使用对称加密,这样解决了性能问题。

HTTPS 目前所使用的 TLS或SSL协议, 就是目前采用的加密通道的规范协议

它利用对称加密、(公私钥)非对称加密, 以及其密钥交换算法,可完成可信任的信息传输

4 数字证书

4.1 数字证书的由来

  1. 为了安全性, 一般还需要签发数字证书! 客户端 和 服务器端要初步互通消息时, 客户端发送请求可以拿到公开的公钥信息, 进而进行非对称加密, 使用公钥, 加密对称加密密钥, 传递给服务器, 后续通信都使用对称加密!

  2. 问题是: 初步互通消息时, 如果请求拿到的公钥信息, 就是假的, 或者不安全的! 那么后续的所有操作, 都将是不安全的!

4.2 数字证书的的作用

所以, 就需要有数字证书(CA证书), 一般是CA机构颁发的, 证明这个公钥是安全可靠的!, CA证书中心会对你网站的公钥, 网站的域名地址, 证书到期时间, 等一些相关信息一起加密签发数字证书, 保证你网站的安全性

5 数字签名

  1. 但这还是有问题:如果证书被篡改了怎么办?,这时就需要用⼀个技术:数字签名。 (根据证书内容, 生成的一个唯一标识)

  2. 数字签名就是先⽤ CA ⾃带的 Hash 算法来计算出证书内容的⼀个摘要,然后使⽤ CA 私钥进行加密,组成数字签名。

  3. 当别⼈把他的证书发过来时,接收方⽤同样的算法再次⽣成摘要,⽤ CA 公钥解密后得到CA生成的摘要,两者进行对⽐后,

  4. 就能确定中间是否被⼈篡改。这样就能最⼤程度的保证通信的安全了。

总结:

  1. 为什么需要https?,是因为http是明文传输的数据的,不安全,而https是对内存加密的

  2. https的加密策略是什么?

  • 先用非对称加密,传递对称加密的密钥(保证了密钥传输的安全),后续使用对称加密,进行交流(保证了数据传输数据安全)

3、就算是第一次交流用非对称加密,公钥也是要在网络中传输的,如何证明公钥是可靠的,如何证明网站是可靠的?(CA机构认证,网站需要申请数字证书,请求时,网站就会将数字证书给到浏览器,浏览器默认就会检测证书的可靠性)

4、主要检测证书的

  1. 是否是权威机构发布的
  2. 看证书中记录的地址和当前访问的网站地址是否一致,只有一致,才可靠
  3. 看证书是否过期

4、为了保证证书不被篡改,产生了一个叫数组签名,可以根据证书的所有的内容,生成一个唯一的标识!,(Hash加密算法),一旦内容如果被修改了,再次生成唯一标识时,和之前生成的唯一标识就不一样!,检测是否被修改!。

6 HTTP2和HTTP1.x比,有什么优势和特点?

1 、从体验点来说

https2的升级,对应用户来说,是跨时代的,基于http2(他充分利用带宽)用户访问网页的速度会非常快

2、从技术点来说

  1. HTTP/2 采⽤⼆进制格式来传输数据,⽽⾮ HTTP 1.x 的⽂本格式,⼆进制协议解析起来更⾼效
  2. HTTP/2 采用一些头部压缩技术,减少在请求和响应头中重复携带的数据,降低网络负担
  3. HTTP/2 采⽤服务器推送方式,主动向客户端推送资源,提高页面加载效率
  4. HTTP/2 采⽤多路复用机制,减少需要创建的连接数量,降低资源占用和性能消耗

3总结

hppt1.X同一时间,只能并发建立6-8个TCP连接,一个连接同时只能一个请求(虽然可以keep-alive复用,但也得一个个来)同时建立的连接的成本比较高,不让一次性建立太多连接,而新版本http2.X建立一次连接,就可以并发多个请求,所以http2的升级,大大提高了页面加载的效率。

7. http缓存控制

Web 服务缓存 大致可以分为:数据库缓存、服务器端缓存(代理服务器缓存、CDN 服务器缓存)、浏览器缓存。

浏览器缓存 也包含很多内容: HTTP 缓存、indexDB、cookie、localstorage 等等。这里我们只讨论 HTTP 缓存相关内容

HTTP缓存:

  • 强缓存
  • 协商缓存

7.2 强缓存 (可以想象成食品过期时间判断)

(进行判断, 是否资源过期, 如果未过期, 直接用缓存)

强缓存,命中强缓存时,浏览器并不会将请求发送给服务器。 强缓存是利用http的返回的响应头中的Expires或者Cache-Control (优先级更高) 两个字段来控制的,用来表示资源的缓存时间。

  1. Expires: 指定一个具体时间(2020年12月12日 17:00), 到了这个时间了, 缓存过期了, 在时间内, 都是有效的, 可以直接读,但是这种方式有一个明显的缺点,由于失效时间是一个绝对时间,所以当 **服务器与
  2. Cache-Control : 指定一个过期时间 (3600s),他是一个相对时间,并且都是与客户端时间比较,所以服务器与客户端时间偏差也不会导致问题, 这个资源你加载到后, 可以用 3600s 总结:如果命中强缓存,在有效期内,使用了本地浏览器的缓存,请求该资源是不会向服务器发送请求的。

7.3协商缓存(可以想象成找供货商专家协商)

1、协商缓存的概念

看看过期时间, 食品没过期, 直接吃 (直接读缓存, 不发请求) 强缓存

食品过期时间过了, 能不能吃呢? 问问专家(服务器), 专家瞅了一眼, 没过期 (响应304, 不返回内容) , 直接吃 (协商缓存)

如果问过专家(服务器), 专家瞅了一眼, 呀真过期了, 原来的不要了, 我重新给你发一个 (响应200, 并返回内容)

2、 协商缓存的实现技术 Last-Modify/If-Modify-SinceEtag/If-None-Match`

若未命中强缓存(强缓存过期了),则浏览器会将请求发送至服务器。

服务器根据http头信息中的Last-Modify/If-Modify-SinceEtag/If-None-Match来判断是否命中协商缓存。如果命中,则http返回码为304 (你本地之前加载的资源是有效的),浏览器从缓存中加载资源`。

3总结:

  • 强缓存:检查过期事件,判断缓存是否失效,如果不失效,直接用,不发请求 大大的减少了服务器的请求次数,在过期时间内,直接从客户端内存中读取、

  • 协商缓存:强缓存命中失效了,超过过期时间了,拿着标识(最后的修改时间,唯一标识etag),问服务器,是否真的过期了,如果验证通过,服务器会直接响应304,且不会返回资源

  • 场景:1、不会经常变换的资源,如图片,就非常适合应用强缓存(过期时间也可以设置的很长) 2、如果是一些很可能会变的资源,同时也希望能缓存,过期时间设置短一些,一旦过期,就可以用协商缓存,强缓存和协商缓存两个在实际工作中都是互相配合的来使用,并不是单独的使用哪一个。

8.TCP协议

1 、概念

TCP协议(Transmission Control Protocol传输控制协议)是一种面向连接(连接导向)的、可靠的、基于IP的传输层协议,TCP使用校验,确认和重传机制来保证可靠传输,而前面说到的HTTP协议就是建立在TCP/IP协议之上的一种应用。

9 什么是DNS 解析

  1. DNS解析, 将域名 转化为 ip地址

10. 一次完整的HTTP服务过程是什么(以访问百度网页为例)

  1. 输入www.baidu.com, 回车后, 需要先进行DNS解析, 得到IP地址 可以在cmd中ping www.baidu.com 112.80.248.75

  2. 根据IP地址, 找到服务器, 开始建立TCP连接, 三次握手

  3. 浏览器端发送 http请求, 服务器端进行响应 index.html

  4. 浏览器解析 index.html, 加载 index.html 中需要加载的其他一些资源(图片, css, js) ...

  5. 浏览器完成页面的解析渲染

  6. http服务完成, 释放关闭TCP连接, 四次挥手

11 什么是三次握手?

  1. 建立连接 => 三次握手 (双方确认)
  • (1) 服务器啊, 我是浏览器, 我要和你建立连接(第一次握手发送请求)
  • (2) 服务器看到了, 好的, 那么建立连接吧, 我准备好了, 你确定吗?(第二次握手确定请求)
  • (3) 浏览器: 是的, 我确定!(第三次握手双方达成共识)
  • 连接就建立成功
  • 三次握手 = 连接的发起 + 双方的确认

把三次握手想象成这样一个场景

男生(客户端)要追一个女生(服务器),这时候男生(客户端)就给女生(服务器)发了一条“我爱你”的表白消息,但这个时候呢女生(服务器,可能因为是网络延迟等各种的原因)去做饭去了,可能很晚才看到消息,然后就回了男生(客户端)一句我愿意,你确定爱我吗,但是呢这时候男生(客户端)以为一直没有回复他,早就走了,而这个时候女生(服务器)一直在等待男生(客户端)的确定,**这时候会造成一个很大的问题,服务器一直在等待客户端的确定(造成服务器的空间浪费以及端口消耗),但客户端一直没有反应,这就造成了服务器的资源上很大的浪费。**

总结:为什么要3次握手

所以三次握手第一次发送请求,第二次双方确定连接,第三次建立连接关系,但凡中间一次没有满足,建立关系取消,防止服务器开启后因各种原因导致的资源浪费。

12 .什么是四次挥手

以员工跟老板申请下班为场景来帮助理解

(a:客户端 b:服务端) 1、一开始a工作完了想要下班离开,但是呢?怕B还有事情要交代,那么呢?只好向B打招呼,我要走了(第一次挥手),请求停止交谈(此时,a到B的连接没有断开,依旧可以进行通信); 2、同意A的请求,说好的,但是我这里可能还有一些话(数据)没说完。我检查看看, 你等等, 等我说完你再走(第二次挥手)。 3、B确实没啥要补充的了,就告知你可以走了(第四次挥手) 4、A说好的,知道了,拜拜(第四次挥手);(B得知A走开了,关闭了自己的连接 )

总结:为什么要4次挥手

  1. 第一次挥手:客户端提出断开请求,
  2. 第二次挥手:服务器同意请求断开的连接,让客户端等一等,等我检查一下数据是否传输完毕,
  3. 第三挥手:服务器检查完数据已经传递完,服务器确定可以断开了,服务器确定可以断开了,
  4. 第四次挥手,客户端等待一会后,跟服务器断开了连接 防止在客户端和服务器之间通信或者数据传输时,断开连接的时候有数据没有传递完。