Http3.0
Http的进化史

从上图的Http进化史我们可以看出,Http和Http3的传输层是完全不同的协议,Http3采用的是UDP协议。我们知道UDP是一个不可靠的协议,而TCP协议是可靠协议,怎样保证可靠传输呢?重传。
QUIC协议
在UDP协议之上,新增了QUIC协议。由于TCP协议相对于UDP协议控制比较复杂耗时,因此针对Http应用贴身开发了QUIC协议代替TCP协议中关于可靠、流量控制的部分。
- QUIC协议的特性
1、QUIC提供类似Http2的流功能;
2、QUIC使用流ID取代IP和端口,这样就能实现连接迁移。例如,从4G切换到wifi,下层的IP和端口变了,但是由于QUIC的流ID没有变,这个连接不会变,因此可以继续使用这个连接。
然后我们来看一下Http3在Http2上有什么变化:Http3由Http2进化而来,Http2最大的变化就是基于二进制流的传输。那么到Http3,由于QUIC已经管理了流,Http3本身就减负了,将流管理下移QUIC,而本身就直接调用QUIC的接口就可以了。
###Http3如何工作
- 我们回想一下Https,Https是类似于TCP握手的方式,先工作在Http1上,通过Http1传递交换得到密钥,然后切换到Https上工作。(Http+TLS)
- 接着我们回想一下Http2,Http2也是基于TLS(安全传输层协议)的,所以Http2和Https也是同样的过程,需要握手建立TLS连接,只是TLS连接完成后,发送一个Http2的连接确认消息,确认后,客户端服务器使用Http2进行连接通讯。
- 最后让我们看一下Http3如何工作。首先要建立好Http2连接,然后发送Http2扩展帧,这个帧包括IP和端口,浏览器收到扩展帧,使用该IP和端口,使用QUIC建立连接,如果成功则断开Http2,升级为Http3。
这三者,都用TCP协议的握手原理去理解,不同的是握手方式不同。
SSL握手
#####SSL握手的目的是什么?过程是怎么样的?
SSL握手的过程都是明文,因此SSL握手的重点就在于怎么在不安全的网络中进行安全的密钥交换。
TLS 和 SSL 的关系可以简单概括为一句话:TLS 是 SSL 的升级版和正式继任者,SSL 是 TLS 的前身。
RSA算法交换密钥步骤
- 1、客户端给出协议版本号、一个随机数(Random1),以及客户端支持的加密方法;
- 2、服务端确认使用的加密方法,并给出数字证书、以及随机数(Random2);
- 3、客户端确认数字证书有效、生成一个新的随机数(premaster secret),并使用数字证书中的公钥,使用RSA算法加密这个随机数(非对称加密),发给服务器端。
- 4、服务端使用自己的私钥,获取客户端发来的随机数(premaster secret);
- 5、客户端和服务端根据约定的加密方式,使用前面的三个随机数,生成对话密钥(master secret),用来加密接下来的整个对话过程(对称加密)。
LS 1.2 握手过程(RSA密钥交换)
- 1、客户端发送 ClientHello,包含:支持的TLS版本号、客户端随机数(Random1)、支持的密码套件列表(如 RSA_WITH_AES_128_GCM_SHA256)、支持的压缩方法;
- 2、服务端回复 ServerHello,选定密码套件和压缩方法,并给出服务端随机数(Random2);
- 3、服务端发送数字证书(包含公钥),若需要双向认证还会请求客户端证书;
- 4、服务端发送 ServerHelloDone,表示握手消息发送完毕;
- 5、客户端验证证书有效性(检查颁发机构、是否过期、域名是否匹配),生成预主密钥(premaster secret),用服务端公钥加密后发送 ClientKeyExchange;
- 6、客户端发送 ChangeCipherSpec,通知服务端后续消息将使用协商出的密钥加密;随后发送 Finished,包含握手消息的校验值;
- 7、服务端用自己的私钥解密得到 premaster secret,双方各自用 Random1 + Random2 + premaster secret 生成主密钥(master secret),再派生出会话密钥;
- 8、服务端发送 ChangeCipherSpec 和 Finished,握手完成,双方开始用对称加密通信。
TLS 1.3 相比 1.2 的关键改进
- 1、握手从 2-RTT 缩减为 1-RTT:客户端在 ClientHello 中就带上密钥共享(key share),服务端在 ServerHello 时即可开始加密,无需等证书验证后再加密;
- 2、移除了 RSA 密钥交换:不再支持用 RSA 加密 premaster secret 的方式,全面转向 ECDHE(临时椭圆曲线 Diffie-Hellman),实现前向安全——即使服务端私钥泄露,历史通信也无法被解密;
- 3、移除了不安全的算法:RC4、3DES、SHA-1、静态 RSA/DH 密钥交换等全部废弃;
- 4、加密范围扩大:服务端的证书在握手阶段就被加密传输,保护用户隐私;
- 5、密码套件简化为只保留 AEAD 类型(如 AES_256_GCM、ChaCha20_Poly1305),不再支持 CBC 模式等存在已知攻击的方案。
Https一定安全吗?
https不一定全是安全的,一些网站会使用自签名证书。
自签名证书是指不受信任的任意机构或个人,使用工具自己签发的SSL证书。不是从公共证书机构(CA)那里申请来的证书,没有第三方监督审核,不受浏览器和操作系统信任,常被用于伪造证书进行中间人攻击,劫持SSL加密流量。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 搬码人’s Blog!
评论






