TLS协议详解-过程和优化


前言

上一节,主要是熟悉一些基本概念和原理,本节主要是介绍,TLS1.2版本协议通讯过程的梳理和优化。这样在遇到分析https网址的时候就有基本思路了


TLS协议的组成

记录协议(Record Protocol)

记录协议规定了TLS收发数据的基本单位:记录(Record)。它有点像是TCP里的segment。所有的其他子协议都是需要通过记录协议发出。但多个记录数据可以在一个TCP包一次性发出。

报警协议(Alert Protocol)

报警协议的职责是向对方发出报警信息,有点类似HTTP里的状态码。比如 protocol_version就是不支持旧版本,bad_certificate 就是证书有问题,收到报警后,另一方可以选择继续,也可以立即终止连接。

握手协议(Handshark Protocol)

浏览器和服务器会在握手过程中协商TLS版本号,随机数,密码套件等信息,然后交换证书和秘钥参数,最终双方协商得到会话秘钥,用于后续混合加密。

变更密码规范协议 (Change Cipher Spec Protocol)

就是一个通知,告诉对方,后续的数据将使用加密保护。而之前的数据都是明文的。

TLS1.2 通讯过程

ECDHE握手

在这里插入图片描述
在这里插入图片描述

RSA握手(已不是主流)

“Pre-Master”不再需要算法生成,而是客户端直接生成随机数。
在这里插入图片描述在这里插入图片描述

在这里插入图片描述

HTTPS 优化

硬件优化

软件优化

Linux内核,Nginx, OpenSSL等软件升级

协议优化

如果有可能,尽量采用TLS1.3, 大幅度简化握手过程,完全握手只要1-RTT。

如果使用TLS1.2 握手时秘钥交换协议,尽量采用椭圆曲线的ECDHE算法,它运算速度快,安全性高,还支持“False Start”,能够把握手的消息往返由2-RTT减少到1-RTT。

证书优化

除了秘钥交换,握手过程中的证书验证也是一个耗时的操作,服务器需要把自己的证书链全发给客户端,然后客户端接收后再逐一验证。

客户端证书验证是一个很复杂的操作,除了要公钥解密验证多个证书签名外,因为证书还有可能被撤销失效,客户端有时候还会再去访问CA,下载CRL或者OCSP数据,这又会产生DNS查询,建立连接,收发数据等一系列网络通讯,增加很多RTT。

CRL(Certificate revocation list,证书吊销列表)由CA定期发布,里面是所有被撤销信任的证书序号,查询这个列表就可以知道证书是否有效。

CRL因为是“定期”发布,就有“时间窗口”的安全隐患,而且随着吊销证书的增多,列表会原来越大,一个CRL经常会达到MB。效率不高。

CRL基本上不用了,替代者是OCSP(Online Certificate Status Protocol, 在线证书状态协议),向CA发送查询请求,让CA返回证书有效状态。

但是OCSP也要多出一次网络请求的消耗,而且依赖CA服务器,如果CA服务器很忙,那响应延迟也是等不起的。

OCSP Stapling, 它可以让服务器预先访问CA获取OCSP响应,然后在握手时随证书一起发给客户端,免去客户端连接CA服务器查询的时间。

Nginx 可以通过指令“ssl_stapling on”开启“OCSP Stapling”。

因为OCSP会增加额外的网络连接成本,所以Chrome等浏览器的策略是只对EV证书使用OCSP检查有效性,普通网站的DV,OV证书忽略这个操作。

会话复用

会话复用(TLS session resumption)

Session ID

客户端和服务器端首次连接后各自保存一个会话ID号,内存里存储主秘钥和其他相关信息。当客户端再次连接时候发一个ID过来,服务器就在内存里面找,找到就直接用主秘钥恢复会话状态,跳过证书验证和秘钥交换,只用一个消息往返就建立了安全通讯。

Session Ticket

Session ID 是最早出现的会话复用技术,也是应用最广的,但它也有缺点,服务器必须保存每个客户端的会话数据,服务器负担较重。

Session Ticket方案,类似HTTP的Cookie,存储的责任由服务器转移到了客户端,服务器加密会话信息,用“New Session Ticket”消息发给客户端,让客户端保存。
重连的时候,客户端使用扩展“session_ticket”发送Ticket而不是Session ID,服务器解密后验证有效期,就可以恢复会话,开化加密通讯。

PSK

“Session ID”和“Session Ticket” 这两种会话复用技术在TLS1.3中已经被废除,采用的是PSK实现会话复用。
“False Start” “Session ID” "Session Ticket"等方式只能实现1-RTT,而TLS1.3更进一步实现了“0-RTT”,在发送Ticket的同时会带上应用数据(Early Data),免去了1.2里面的服务器确认步骤,这种方式叫“Pre-shared Key”,简称PSK。
在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值