学习敖丙,传送门

HTTP 与 HTTPS

  1. HTTP 是超文本传输协议,信息是明文传输存在安全风险的问题;HTTPS 则解决 HTTP 不安全的缺陷在 TCP 和 HTTP 应用层之间加入了 SSL/TLS 安全协议,使得报文能够加密传输
  2. HTTP 连接建立相对简单, TCP 三次握手之后便可进行 HTTP 的报文传输;而 HTTPS 在 TCP 三次握手之后,还需进行 SSL/TLS 的握手过程,才可进入加密报文传输
  3. HTTP 的端口号是 80,HTTPS 的端口号是 443
  4. HTTPS 协议需要向 CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的

HTTPS 在 应用层(HTTP) 与 传输层(TCP)层之间加入了 SSL/TLS 协议;

记录应用层--HTTPS

HTTPS 的工作原理

HTTPS 采用的是对称加密非对称加密结合的「混合加密」方式;


对称加密与非对称加密

对称加密:对称加密是指有一个**,用它可以对一段明文加密,加密之后也只能用这个**来解密得到明文。如果通信双方都持有**,且天知地知你知我知,绝对不会有别的人知道,那么通信安全自然是可以得到保证的(在**足够强的情况下);

非对称加密:非对称加密有两个**,一个是公钥,另一个是私钥。一般来说,公钥用来加密,这时密文只能用私钥才能解开。但是在传输时会准备两组公钥私钥,这是因为单组公钥私钥只能保证单程的加解密,因此使用两组。

  1. 服务端有非对称加密的公钥 A1,私钥 A2;客户端有非对称加密的公钥 B1,私钥 B2;
  2. 客户端向服务端发起请求,服务端将公钥 A1 返回客户端;
  3. 客户端浏览器收到公钥 A1后,将自己保存的公钥 B1 发送给服务端;
  4. 之后服务端向客户端发送的所有数据,服务端使用公钥 B1 进行加密,客户端使用私钥 B2 进行解密;
  5. 客户端向服务端发送的所有数据,客户端使用公钥 A1 进行加密,服务端使用私钥 A2 进行解密。

但是 HTTPS 并没有采用完全的非对称加密,因为非对称加解密耗时要远大于对称加解密,对性能有很大损耗;因此 HTTPS 使用的是对称加密和非对称加密

  1. 服务端有非对称加密的公钥 A1,私钥 A2;
  2. 客户端发起请求,服务端将公钥 A1 返回给客户端;
  3. 客户端随机生成一个对称加密的** K,用公钥 A1 加密后发送给服务端;
  4. 服务端收到密文后使用私钥 A2 进行解密,得到对称** K,此时完成了完全的对称**交换,解决了对称加密时**传输被人窃取的问题;
  5. 之后双方通信都使用** K 进行对称加解密。

此时,还不是完全的安全!!有下面这种情况:

记录应用层--HTTPS

出现这一问题的核心原因是客户端无法确认收到的公钥是不是真的是服务端发来的。为了解决这个问题,互联网引入了一个公信机构,这就是 CA。

服务端在使用 HTTPS 前,去经过认证的 CA 机构申请颁发一份数字证书,数字证书里包含有证书持有者、证书有效期、公钥等信息,服务端将证书发送给客户端,客户端校验证书身份和要访问的网站身份确实一致后再进行后续的加密操作。

并且该数字证书是被“数字签名”后的,其实就是一种防伪技术,只要有人篡改了证书,那么数字签名必然校验失败;那么就会有:

  1. CA机构拥有自己的一对公钥和私钥
  2. CA机构在颁发证书时对证书明文信息进行哈希
  3. 将哈希值用私钥进行加签,得到数字签名

明文数据和数字签名组成证书,传递给客户端。

  1. 客户端得到证书,分解成明文部分 Text 和数字签名 Sig1;
  2. 用 CA 机构的公钥进行解签,得到 Sig2(由于 CA 机构是一种公信身份,因此在系统或浏览器中会内置 CA 机构的证书和公钥信息);
  3. 用证书里声明的哈希算法对明文 Text 部分进行哈希得到 H;
  4. 当自己计算得到的哈希值 H 与解签后的 Sig2 相等,表示证书可信,没有被篡改

HTTP1.0,HTTP1.1 和 HTTP2.0

HTPP1.0

  • HTTP1.0 仅仅提供了最基本的认证,这时候用户名和密码还未经加密,因此很容易收到窥探
  • HTTP1.0 被设计用来使用短链接,即每次发送数据都会经过 TCP 的三次握手和四次挥手,效率比较低;
  • HTTP1.0 只使用 header 中的 If-Modified-Since 和 Expires 作为缓存失效的标准;
  • HTTP1.0 不支持断点续传,也就是说,每次都会传送全部的页面和数据
  • HTTP1.0 认为每台计算机只能绑定一个 IP,所以请求消息中的 URL 并没有传递主机名(hostname)。

HTTP1.1

  • HTTP1.1 使用了摘要算法来进行身份验证
  • HTTP1.1 默认使用长连接,长连接就是只需一次建立就可以传输多次数据,传输完成后,只需要一次切断连接即可。长连接的连接时长可以通过请求头中的 keep-alive 来设置;
  • HTTP1.1 中新增加了 E-tag,If-Unmodified-Since, If-Match, If-None-Match 等缓存控制标头来控制缓存失效;
  • HTTP1.1 支持断点续传,通过使用请求头中的 Range 来实现;
  • HTTP1.1 使用了虚拟网络,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。

HTTP2.0

  • 头部压缩,由于 HTTP1.1 经常会出现 User-Agent、Cookie、Accept、Server、Range 等字段可能会占用几百甚至几千字节,而 Body 却经常只有几十字节,所以导致头部偏重。HTTP 2.0 使用 HPACK 算法进行压缩;
  • 二进制格式,HTTP2.0 使用了更加靠近 TCP/IP 的二进制格式,而抛弃了 ASCII 码,提升了解析效率;
  • 强化安全,由于安全已经成为重中之重,所以 HTTP2.0 一般都在 HTTPS 上
  • 多路复用,即每一个请求都是是用作连接共享。一个请求对应一个 id,这样一个连接上可以有多个请求。

相关文章:

  • 2022-12-23
  • 2021-10-26
  • 2021-10-30
  • 2021-10-09
  • 2021-09-05
  • 2021-04-29
  • 2022-12-23
  • 2021-11-09
猜你喜欢
  • 2021-12-02
  • 2021-05-03
  • 2021-08-22
  • 2021-09-13
  • 2022-12-23
  • 2022-02-07
  • 2022-01-25
相关资源
相似解决方案