在查阅大量资料之后,我整理出了http 1.0/1.1/2/3 各个版本的知识要点和http已经https的原理剖析

HTTP 与 HTTPS 的差异

HTTP

  • HTTP 运用明文 内容或许会被偷听。
  • HTTP 不验证通讯方的身份 或许会被伪装。
  • HTTP 无法证明报文的完整性 或许会被篡改。
  • HTTP 端口是 80。
  • HTTP 与 TCP 进行通讯,而 https 与 SSL 或许 TLS 层通讯。

HTTPS

  • HTTPS 端口是 443。
  • HTTPS 多了证书这一概念。
  • HTTPS 不是新的协议 是身披 SSL/TLS 协议外壳的 HTTP。
  • HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,HTTPS 运行在 SSL/TLS 之上,SSL/TLS 运行在 TCP 之上,所有传输的内容都经过加密的。
  • HTTPS 采用对称加密和非对称加密两者并用的加密方式。

https加密原理

谈到 HTTPS, 就不得不谈到与之相对的 HTTP。HTTP 的特性是明文传输,因此在传输的每一个环节,数据都有或许被第三方窃取或许篡改,详细来说,HTTP 数据经过 TCP 层,然后经过 WIFI 路由器、运营商和目标服务器,这些环节中都或许被中间人拿到数据并进行篡改,也便是我们常说的中间人进犯。 为了防备这样一类进犯,我们不得已要引入新的加密方案,即 HTTPS。 HTTPS 并不是一个新的协议, 而是一个加强版的 HTTP。其原理是在 HTTP 和 TCP 之间建立了一个中间层,当 HTTP 和 TCP 通讯时并不是像以前那样直接通讯,直接经过了一个中间层(TLS、SSL)进行加密,将加密后的数据包传给 TCP, 呼应的,TCP 必须将数据包解密,才干传给上面的 HTTP。这个中间层也叫安全层。安全层的核心便是对数据加解密。

www.bilibili.com/video/BV1KY… www.bilibili.com/video/BV17U… https采用ssl/tls进行加密,运用了对称加密,非对称加密和CA安排权威认证

详细实现进程有:ssl四次握手

  1. 客户端向服务端发送Client Hello报文,该报文包括(TLS版别,所支撑的加密套件和第一个随机数)
  2. 这个阶段服务器会向客户端发送三个报文,服务端收到恳求后,如果支撑SSL通讯,会首先以Server Hello报文进行应答,报文包括(TLS版别,所支撑的加密套件和第二个随机数)然后发送数字证书,包括服务端的公钥,最后发送Server Hello Done报文,告知客户端握手协议初始化完成
  3. 客户端证书认证成功之后拿到服务端的公钥,然后生成第三个随机数(预主密钥),用公钥加密后发给服务端
  4. 服务端用自己的私钥解密取得第三个随机数(即预主密钥)然后两者用相同的加密办法混合这三个随机数,生成最终的会话密钥
    在查阅大量资料之后,我整理出了http 1.0/1.1/2/3 各个版本的知识要点和http已经https的原理剖析

数字证书

数字证书是可信任安排颁布给特定对象的认证。 为了获取这个证书,服务器运营者需要向第三方认证安排获取授权,这个第三方安排也叫 CA(Certificate Authority), 认证通往后 CA 会给服务器颁布数字证书。 这个数字证书有两个作用:

  • 服务器向浏览器证明自己的身份。
  • 把公钥传给浏览器。

怎样验证证书的有效性?

  • 服务器把证书发送过来,证书上有一些基本信息和一个签名,签名的内容是摘要算法和摘要密文,摘要密文(指纹)是基本信息经过摘要算法计算出来的 hash 值。签名是证书安排经过私钥加密的。

  • 客户端寻找内置证书,判别服务器发来的证书是否在自己内置的证书列表,找到了就运用内置证书的公钥解密签名得到指纹内容和指纹算法,然后运用指纹算法加密基本信息得到 hash(指纹内容),拿这两个 hash 比照判别是否共同,共同就经过。


http 版别

coolshell.cn/articles/19…

1,HTTP 0.9 / 1.0

HTTP 0.9版别的协议简单到极点,恳求时,不支撑恳求头,只支撑 GET 办法 HTTP 1.0 扩展了0.9版,其中首要增加了几个改变:

  • 在恳求中参加了HTTP版别号,如:GET /coolshell/index.html HTTP/1.0
  • HTTP 开端有 header了,不管是request仍是response 都有header了。
  • 增加了HTTP Status Code 标识相关的状况码。
  • 还有 Content-Type 能够传输其它的文件了。
  • 并且还添加了其他的恳求办法:put、delete、options… HTTP1.0功能上有一个很大的问题,那便是每恳求一个资源都要新建一个TCP链接,而且是串行恳求

2, HTTP/1.1

  • 设置 keep-alive (长链接)来让HTTP重用TCP链接,重用TCP链接能够省了每次恳求都要在广域网上进行的TCP的三次握手的巨大开销
  • 支撑pipeline网络传输,只要第一个恳求宣布去了,不必等其回来,就能够发第二个恳求出去,能够削减全体的呼应时间
  • 增加了 cache control 机制
  • 新增了一些恳求办法
  • 新增了一些恳求头和呼应头,让客户端能够跟服务器端进行更多的协商
  • 正式参加了一个很重要的头—— HOST这样的话,服务器就知道你要恳求哪个网站了。(多个域名解析到同一个IP上,要区分用户是恳求的哪个域名,就需要在HTTP的协议中参加域名的信息,而不是被DNS转换过的IP信息)

3,HTTP/2

虽然 HTTP/1.1 现已开端变成应用层通讯协议的一等公民了,可是仍是有功能问题,虽然HTTP/1.1 能够重用TCP链接,可是恳求仍是一个一个串行发的,需要保证其次序。但是,大量的网页恳求中都是些资源类的东西,这些东西占了整个HTTP恳求中最多的传输数据量。所以,理论上来说,如果能够并行这些恳求,那就会增加更大的网络吞吐和功能。

  • 多路复用 —HTTP/2是能够在一个TCP链接中并发恳求多个HTTP恳求,移除了HTTP/1.1中的串行恳求。
  • 二进制分帧 —-HTTP/2 采用二进制格局传输数据,而非 HTTP 1.x的文本格局,解析起来更高效
  • 首部紧缩 —HTTP/2会紧缩头,如果你同时宣布多个恳求,他们的头是相同的或是相似的,那么,协议会帮你消除重复的部分。
  • 服务器推送 —HTTP/2允许服务端在客户端放cache,又叫服务端push,也便是说,你没有恳求的东西,我服务端能够先送给你放在你的本地缓存中。比如,你恳求X,我服务端知道X依赖于Y,虽然你没有的恳求Y,但我把把Y跟着X的恳求一同回来客户端。

4,HTTP/3

HTTP/3破天荒地把HTTP底层的TCP协议改成了UDP!