甩干HTTPSHTTP2和HTTP3

Posted 闹闹前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了甩干HTTPSHTTP2和HTTP3相关的知识,希望对你有一定的参考价值。

甩干HTTPS、HTTP2和HTTP3
甩干HTTPS、HTTP2和HTTP3

云淡风轻近午天,傍花随柳过前川。识人不识余心乐,将为偷闲学少年。

甩干HTTPS、HTTP2和HTTP3


HTTPS

  • 默认端口号 443
  • HTTP over SSL/TLS

SSL/TLS

  • SSL 即安全套接层(Secure Sockets Layer),在 七层模型中处于第 5 层(会话层)
  • 因发展的原因,1999年改名为TLS(传输层安全,Transport Layer Security
  • 目前应用的是TLS 1.2版本
  • TLS 由记录协议、握手协议、警告协议、变更密码规范协议、扩展协议等几个子协议组成,综合使用了对称加密、非对称加密、身份认证等技术
  • TLS 的密码套件命名规范是“密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法”

浏览器和服务器在使用 TLS 建立连接时需要选择一组恰当的加密算法来实现安全通信,这些算法的组合被称为“密码套件”(cipher suite,也叫加密套件) TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256是一个密码套件,ECDHE是密钥交换算法,RSA是身份验证,AES是对称加密算法,128是强度,GCM是分组模式,SHA256是签名hash算法

  • 记录协议(Record Protocol)规定了 TLS 收发数据的基本单位:记录(record)
  • 握手协议(Handshake Protocol)是 TLS 里最复杂的子协议,要比 TCP 的 SYN/ACK 复杂的多,浏览器和服务器会在握手过程中协商 TLS 版本号、随机数、密码套件等信息,然后交换证书和密钥参数,最终双方协商得到会话密钥,用于后续的混合加密系统

OpenSSL

  • 著名的开源密码学程序库和工具包,几乎支持所有公开的加密算法和协议
  • 是 SSL/TLS 的具体实现,Web 服务器 Apache、nginx等底层都是基于它来实现TLS的
  • 开源的

对称加密算法

  • 是指加密和解密时使用的密钥是同一个
  • 常用的是 AES
  • AES 的意思是“高级加密标准”(Advanced Encryption Standard),密钥长度可以是 128、192 或 256,安全强度高,性能好,应用最广泛的对称加密算法
  • 最新的加密分组模式被称为 AEAD(Authenticated Encryption with Associated Data),在加密的同时增加了认证的功能,常用的是 GCM、CCM 和 Poly1305
  • 只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换

非对称加密算法

  • 也叫公钥加密算法
  • 一个叫“公钥”(public key),可以公开给任何人使用,公钥加密后只能用私钥解密
  • 一个叫“私钥”(private key)。须严格保密,私钥加密只能用公钥解密
  • “公钥” 和 “私钥” 是不同的,“不对称”
  • TLS中有DH、DSA、RSA、ECC
  • RSA的安全性基于“整数分解”的数学难题,使用两个超大素数的乘积作为生成密钥的材料
  • ECC(Elliptic Curve Cryptography)是基于“椭圆曲线离散对数”的数学难题,使用特定的曲线方程和基点生成公钥和私钥,子算法 ECDHE 用于密钥交换,ECDSA 用于数字签名
  • 解决了密钥交换问题但速度慢

混合加密

  • 通信刚开始的时候使用非对称算法,比如 RSA、ECDHE,首先解决密钥交换的问题
  • 然后用随机数产生对称算法使用的“会话密钥”(session key),再用公钥加密
  • 最后对方用私钥解密,取出会话密钥。这样,双方就实现了对称密钥的安全交换,后续就不再使用非对称加密,全都使用对称加密。

SSL 握手过程

  1. 客户端先给服务端发送一个消息,消息内容包括:客户端支持的加密方式,支持的压缩方法,SSL的版本号,客户端生成的随机数,文本内容“Hello”等;
  2. 服务端接收到消息后,也回发一个Hello,并携带从客户端支持的加密方式中选择的加密方式,服务端生成的随机数,服务端的SSL版本号等信息;
  3. 随后服务器给客户端发送一个Certificate报文,报文中包含服务端的公钥证书;
  4. 紧接着服务器给客户端发送Server Hello Done, 表示最初的协商握手过程结束;
  5. 客户端接收到服务端发送的握手结束的消息后,以Client Key Exchange作为回应,此报文中包含通信加密过程中使用的一种被称为Pre-master secret的随机密码串,并使用第三步接收到的公钥证书进行了加密;
  6. 接着客户端发送Change Cipher Spec报文,告知服务端之后的所有数据将使用第五步中生成的master secret进行加密
  7. 随后客户端发送Finish报文,此报文中包含连接至今所有报文的整体校验值,用于完整性验证;
  8. 服务端接收到客户端发送的Change Cliper Spec报文后,同样以Change Cliper Spec报文作为回应;
  9. 接着服务端发送Finish报文给客户端,表示服务端已正确解析客户端发送的整体校验值,至此,SSL握手的过程结束。
  10. 随后开始使用HTTP协议传输使用master secret加密过的数据。

HTTP2

头部压缩

  • 开发了专门的“HPACK”算法,在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,还釆用哈夫曼编码来压缩整数和字符串,可以达到 50%~90% 的高压缩率。

二进制

  • 请求头和请求体都是二进制

多工

  • 同时发送多个请求,服务器同时回应多个请求且不是安顺序的,解决“队头阻塞”问题

服务器推送

  • 主动向客户端推送资源

数据流

  • 数据包不是按顺序发送的,每个数据包都有一个唯一的ID,用于标记属于哪个数据流。
  • 客户端的数据流ID是奇数,服务端是偶数
  • 客户端和服务端都可以发送一个信号帧,取消当前的数据流,并保持TCP连接仍打开着。
  • 客户端可以指定数据流的优先级,服务端根据优先级进行回应

HTTP3

QUIC

  • 由Google再2013年推出的,全称是Quick UDP Internet Connections。
  • HTTP/3 就是基于 QUIC 协议的 HTTP (HTTP over QUIC)
  • 属于分层结构中的传输层

特点

  • 基于UDP的传输层协议
  • 可靠性 在UDP的基础上做了改造,提供了数据包重传、拥塞控制、调整传输节奏等类似TCP的特性以及可靠性
  • 实现了无序、并发字节流 单个数据流的传输是按序的,多个数据流是无序的
  • 快速握手 提供0-RTT和1-RTT的连接建立

RTT(Round-Trip Time) 数据从网络的一端传输到另一端所需的时间

  • 连接迁移 拥有特定的UUID来标记每一次连接,虽然网络环境发生改变,但UUID不变,就可以继续传输数据,不需要断开连接
  • 使用TLS1.3传输安全协议,它的握手时间更短,降低协议的延迟




甩干HTTPS、HTTP2和HTTP3

扫描二维码


闹闹前端


以上是关于甩干HTTPSHTTP2和HTTP3的主要内容,如果未能解决你的问题,请参考以下文章

洗衣机的内部结构及图片

golang面向对象编程—接口

Go语言基础之接口

Go语言基础之接口

go语言基础之接口

go语言碎片整理之接口