甩干HTTPSHTTP2和HTTP3
Posted 闹闹前端
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了甩干HTTPSHTTP2和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 握手过程
-
客户端先给服务端发送一个消息,消息内容包括:客户端支持的加密方式,支持的压缩方法,SSL的版本号,客户端生成的随机数,文本内容“Hello”等; -
服务端接收到消息后,也回发一个Hello,并携带从客户端支持的加密方式中选择的加密方式,服务端生成的随机数,服务端的SSL版本号等信息; -
随后服务器给客户端发送一个Certificate报文,报文中包含服务端的公钥证书; -
紧接着服务器给客户端发送Server Hello Done, 表示最初的协商握手过程结束; -
客户端接收到服务端发送的握手结束的消息后,以Client Key Exchange作为回应,此报文中包含通信加密过程中使用的一种被称为Pre-master secret的随机密码串,并使用第三步接收到的公钥证书进行了加密; -
接着客户端发送Change Cipher Spec报文,告知服务端之后的所有数据将使用第五步中生成的master secret进行加密 -
随后客户端发送Finish报文,此报文中包含连接至今所有报文的整体校验值,用于完整性验证; -
服务端接收到客户端发送的Change Cliper Spec报文后,同样以Change Cliper Spec报文作为回应; -
接着服务端发送Finish报文给客户端,表示服务端已正确解析客户端发送的整体校验值,至此,SSL握手的过程结束。 -
随后开始使用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传输安全协议,它的握手时间更短,降低协议的延迟
扫描二维码
闹闹前端
以上是关于甩干HTTPSHTTP2和HTTP3的主要内容,如果未能解决你的问题,请参考以下文章