Http2

作者: 强某某 | 来源:发表于2020-08-18 10:22 被阅读0次

在http1.1基础上做了大量的改进

- 多路复用
- 二进制分帧
- 首部压缩
- 服务器推送

多路复用

3.jpg

二进制分帧

4.jpg

头部压缩

5.jpg 6.jpg

服务器推送

7.jpg

兼容性

Go只要使用https,默认支持http2

  • 如何兼容
    • 通过客户端协商解决,协商算法:ALPN
8.jpg

协议协商的两种方案

  • Upgrade机制
  • ALPN机制,Application Layer Protocol Negotiation

Upgrade机制

  • 客户端主动发起
    • 如果服务端支持http2,返回101switching protocol
    • 如果服务端不支持http2,直接忽略,返回http1.1的内容
  • 版本标识符
    • 字符串 “h2c” 标示运行在明文 TCP 之上的 HTTP/2 协议(http模式);
    • 字符串 “h2” 标示使用了 TLS的 HTTP/2协议(https模式)
  • Chrome和firefox,只支持加密(tls)的http2,所以Upgrade机制基本上不用,因为Upgrade机制就是明文得h2c模式


    3.jpg

ALPN机制,(Application Layer Protocol Negotiation)

  • 客户端主动发起
    • 如果服务端支持http2,则返回selected h2
    • 如果服务端不支持http2,则返回selected http1.1
  • 协商的时机
    • 在https交换加密密钥的过程中进行协商
    • ALPN只应用于https的http2.0
4.jpg

http协议得弊端

  • 明文传输
    • 信息不安全
    • 容易被截取
    • 容易被篡改
5.jpg

加密方式

  • 对称加密
    • 用来加密和解密的密钥相同
    • 优点:加密性能好
    • 缺点:密钥管理问题(因为秘钥需要从服务端传递到客户端,可能被中间人获取)
  • 非对称加密
    • 用来加解密的密钥不一样
    • 优点:安全性非常高
    • 缺点:加密性能比较差

http协议-对称加密

  • 对称加密是否解决问题
    • 交换密钥
    • 发送方,使用密钥对内容进行加密
    • 接收方,使用密钥对内容估进行解密
    • 可能秘钥被拦截获取,然后中间人通过密钥篡改传输内容

https密钥交换过程

  • 非对称加密算法
    • 私钥
      • 需要进行保密,不能公开
      • 私钥加密的内容,只能通过公钥进行解密。通过私钥和加密算法,能够推导出公钥
    • 公钥
      • 公钥是公开的,通过公钥和加密算法,不能够推导出私钥
      • 公钥加密的内容,只能通过私钥才能解密。

https密钥交换过程

  • 浏览器使用Https的URL访问服务器,建立SSL链接。
  • 服务器接收到SSL链接后,发送非对称加密的公钥A给浏览器。
  • 浏览器生成随机数,作为对称加密的密钥B。
  • 浏览器使用服务器返回的公钥A,对自己生成的对称加密密钥B进行加密,得到密钥C。
  • 浏览器将密钥C发送给服务器
  • 服务器使用自己的私钥D对接受的密钥C进行解密,得到对称加密密钥B。
  • 浏览器和服务器之间使用密钥B作为对称加密密钥进行通信
  • 优点: 非对称加密只使用了一次,后续所有的通信消息都是用对称加密,效率比非对称加密高

说白了,传输得是临时生成得密钥C,而且即使C被拦截也没用,因为最终是靠B去解密信息的,但是仍然有漏洞

中间人攻击

  • 当服务器发送公钥给客户端, 中间人截获公钥 ;
  • 将 中间人自己的公钥 冒充服务器的公钥发送给客户端;
  • 之后客户端会用 中间人的的公钥 来加密自己生成的 对称密钥 。
  • 然后把加密的密钥发送给服务器,这时中间人又把密钥截取;
  • 中间人用自己的私钥把加密的密钥进行解密,解密后中间人就能获取 对称加密的密钥 。
  • 注意: 非对称加密之所以不安全,因为客户端不知道这把公钥是不是属于服务器的。

解决方案(数字证书)

CA提供的公钥一般随着操作系统一起发布

  • 认证中心(CA):

    • 一个拥有公信力、大家都认可的认证中心,数字证书认证机构。
  • 证书内容:

    • 签发者
    • 证书用途
    • 公钥
    • 加密算法
    • Hash算法
    • 证书到期时间
  • 基于数字证书的安全体系

    • 服务器在给客户端传输公钥的过程中,会把公钥和服务器的个人信息通过hash算法生成信息摘要.


      6.jpg
    • 为了防止信息摘要被调换,服务器会采用 CA提供的私钥(就是放在服务器上面的文件)信息摘要进行加密来形成数字签名


      7.jpg
    • 最后会把原来没 Hash算法 之前的 个人信息、公钥及、数字签名 合并在一起,形成 数字证书


      8.jpg
    • 客户端拿到 数字证书 之后,使用 CA提供的公钥 对数字证书里的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥及个人信息进行Hash得到另一份信息摘要


      9.jpg

相关文章

网友评论

      本文标题:Http2

      本文链接:https://www.haomeiwen.com/subject/ghdhjktx.html