罗剑锋透视HTTP协议学习笔记---28 | 连接太慢该怎么办:HTTPS的优化

44 篇文章 6 订阅

28 | 连接太慢该怎么办:HTTPS的优化

HTTPS太慢主要指的是连接慢,而不是使用慢。所以优化的重点集中在连接上。
TLS建立连接的过程中,除了交互消息,还有一些隐性的时间消耗,比如客户端需要验证服务端的证书。
TLS握手过程中,客户端验证服务端证书的真伪,有一种情况,证书是真的,但证书已经废弃,或者被加入了黑名单。所以,对于一些重要的网站【chrome的策略是EV证书,mark1无法验证,apple,招行】,除了验证证书真伪,还需要验证证书的有效状态。

有3种方式验证证书是否有效
其中CRL是指被废弃的证书列表,CRL需要客户端下载一个废弃证书列表,通常有几兆,代价很大,已淘汰。
OCSP在线证书状态协议(Online Certificate Status Protocol)指在线查询证书状态。 客户端在线连接到CA验证,有额外的RTT消耗。
OCSP Stapling,OCSP的改进,由服务端预先查询CA,在Server Hello消息中返回。

另外是证书传输和计算,建议选择椭圆曲线证书(ECDSA),因为224位ECC加密强度相当于2048位RSA,传输ECC证书节省带宽,验证证书的计算量也比较小。

产生用于密钥交换的临时公私钥对(ECDHE)
非对称加密解密处理“Pre-Master”
此二者没有软件或协议加速的手段,只能采用硬件加速,如采用更快的CPU,支持AES加密的CPU,SSL加速卡,SSL 加速服务器
软件优化
采用新版本,适当配置
协议优化
采用1.3,椭圆曲线选高性能曲线优选x25519,次选p-256

会话复用
解决TLS连接性能的主要手段,如果TLS会话能复用,则即使第一次连接时间较长,后继TLS会话可以复用第一次建立的TLS连接,则也可以接受。
复用有2种实现方式:
Session id:
会话共享Session ID【注:共享的是Server Hello的Session ID】.
建立连接时Client Hello,Server Hello各自携带Session ID,后继复用Server Hello的Session ID
后继Client Hello请求携带Session ID, 服务器查询,参数是四元组【DIP,DPORT, Session ID, master secret】,如果存在且一致,跳过秘钥交换计算,证书传递认证阶段,直接恢复会话。
消息结构
Client Hello
Server Hello, Change Cipher, Finished
Change Cipher, Finished
缺点是服务器需要保留所有会话记录,负担重。
在这里插入图片描述
Session ticket
会话共享Session ticket
新建TLS会话时,客户端,服务器携带空session ticket扩展字段,表示自己支持session ticket.
服务端回应Server Hello,携带new session ticket记录,记录了加密的包括主密钥在内的会话信息:注:加密秘钥需要经常更换,否则有安全性问题。
客户端以master key:session ticket的键值对形式存储下来。
后继会话,客户端发起Client Hello时携带session ticket, 服务端解密,恢复会话。
消息结构
New Session Ticket
Client Hello
Server Hello, Change Cipher, Finished
Change Cipher, Finished

在这里插入图片描述

tips:Session ID和Session ticket都是解决TLS session复用的解决方案,因此可以理解他们是互斥的功能。如何判断当前在使用哪个功能?client端永远会发Session ID,服务器端如果使用Session ID,则会发送Session ID,
如果服务端支持Session Ticket,则会发送New Session Ticket,此时服务器端Session ID应该是0字节。
注1:如果即发送Session id又发送Session Ticket,则Session ID优先生效。【www.apple.com】

0-RTT
TLS1.3可以利用psk实现0-RTT, Client Hello携带pre-shared key+ early data,直接Change Cipher spec,进入明文传输。

课后作业:

你能比较一下“Session ID”“Session Ticket”“PSK”这三种会话复用手段的异同吗?
Session ID, Session Ticket, PSK都是TLS连接协议优化手段。
不同的是Session ID, Session Ticket可以实现1-RTT,PSK可以实现0-RTT。
Session ID和Session Ticket的区别是,使用Session ID方式,压力在服务器端,服务器在内存里保存Session ID,收到Client Hello并检索Session ID,恢复会话
Session Ticket方式类似cookie,服务器发送new Session ticket,客户端保存,连接时客户端发送Session ticket,服务器解密恢复会话。

你觉得哪些优化手段是你在实际工作中能用到的?应该怎样去用?
NA

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值