【http】https加速优化
前言
主要记录 https 加速的优化手段。
李柱明博客:https://www.cnblogs.com/lizhuming/p/15486943.html
HTTPS 的连接很慢
https 步骤简要划分
HTTPS 连接大致分为两个部分:
- 非对称加密握手(TLS 握手);
- 对称加密报文传输。
平时说的 HTTPS 很慢是前面第一部分,非对称加密握手阶段很慢。
而握手成功后是很快的。
握手耗时
TLS 握手最长可以花费两个消息往返(2-RTT)。
除了在握手消息的网络耗时之外,还有:
- 产生用于密钥交换的临时公私钥对(ECDHE);
- 验证证书时访问 CA 获取 CRL 或者 OCSP;(这两个知识点可以看后面)
- 非对称加密解密处理“Pre-Master”。
不做优化的情况下,HTTPS 建立连接可能会比 HTTP 慢上几百毫秒甚至几秒。
TLS 握手过程中主要耗时图参考:
优化就按照下图耗时段进行优化。

证书验证
本点只是做理解记录,如果对 CRL 和 OCSP 有所理解,可以跳过。
CRL
CRL(Certificate revocation list)即是证书吊销列表。
由 CA 定期发布,里面是所有被撤销信任的证书序号。
查其内容即可知道本证书是否失效。
缺点:
- CRL 是定期发布,如果证书失效了,但是 CA 机构还没有及时更新 CRL,会导致误判的安全隐患。
- 随着吊销的证书越来越多,下载的 CRL 就会越来越大了,检索也越来越耗时。简直就是越来越浪费空间浪费时间。
所以现在用 OCSP 取代 CRL。
OCSP
OCSP(Online Certificate Status Protocol)在线证书状态协议。
客户端将请求发到一个 OCSP 应答器(服务器),应答器建立与 CA 证书库链接查询该证书的状态,然后回复“ 有效 ”、“ 注销 ”或“ 未知 ”的响应。
优点:
- 在线验证比 CRL 处理速度更快、更方便,也更具独立性。
- 并避免了令人头痛的逻辑问题和处理开销。
问题&解决:
OCSP 也要多出一次网络请求的消耗,而且还依赖于 CA 服务器,如果 CA 服务器很忙,也是很耗时的。
- 解决:OCSP Stapling:OCSP 装订,是一个补丁。可以让服务器预先访问 CA 获取 OCSP 响应,然后在握手时随着证书一起发给客户端,免去了客户端连接 CA 服务器查询的时间。
硬件优化
HTTPS 连接是计算密集型,而不是 I/O 密集型:
- 计算密集型解决方法:加速计算。升级 CPU,硬件加速卡等等。
- I/O 密集型解决方法:升级网卡、带宽、SSD 存储等等数据通信设备。
HTTPS 连接是计算密集型,而不是 I/O 密集型,其硬件优化手段有:
- 升级 CPU:如果内建 AES 优化,可以加速握手,也可以加速传输。
- SSL 加速卡:加解密时调用它的 API,让专门的硬件来做非对称加解密,分担 CPU 的计算压力。
- SSL 加速服务器:用专门的服务器集群解决 TLS 握手时的加密解密计算,性能要比单纯的“加速卡”要强大。
软件优化
软件方面的优化还可以再分成两部分:一个是 软件升级 ,一个是 协议优化 。
软件升级
软件升级,如升级 linux 内核,升级 OpenSSL 等等。
这些软件在更新版本的时候都会做性能优化、修复错误,只要运维能够主动配合,这种软件优化是最容易做的,也是最容易达成优化效果的。
但是升级内核兼容性要解决,版本跨度大,升级也是很棘手的。
协议优化
目前尽量采用 TLS1.3。
- 它大幅度简化了握手的过程,完全握手只要 1-RTT,而且更加安全。
握手时使用的密钥交换协议尽量选用椭圆曲线的 ECDHE 算法。(RSA 在 TLS 1.3 中已经被废弃)
- 运算速度快。
- 安全性高。
- 支持“False Start”,能够把 TLS1.2 握手的消息往返由 2-RTT 减少到 1-RTT,达到与 TLS1.3 类似的效果。
椭圆曲线也要选择高性能的曲线。
- 最好是 x25519,次优选择是 P-256。
对称加密算法方面,可以选用“AES_128_GCM”,比“AES_256_GCM”略快一点点。
证书优化
握手过程中的证书验证也是一个比较耗时的操作,服务器需要把自己的证书链全发给客户端,然后客户端接收后再逐一验证。
两个可优化点:
证书传输。
证书验证。
服务器的证书可以选择椭圆曲线(ECDSA)证书而不是 RSA 证书。
- 因为 224 位的 ECC 相当于 2048 位的 RSA。证书小,传输就少,计算也少。
采用 OCSP 验证证书。开启 OCSP Stapling。
会话复用
大杀器。
连接同一服务器时,明明证书、公钥都一样,但是每次通信都需要重新 TLS 握手,重新验证证书来获取公钥,算出对称秘钥。
这样太浪费时间了,我们可以使用缓存功能,双方把会话 ID 和对称秘钥记录下来,下次链接时直接使用岂不是更加方便快捷吗,其实这就是会话复用。
会话复用(TLS session resumption),复用分两种:
Session ID:客户端和服务器首次连接后各自保存一个会话的 ID 号,内存里存储主密钥和其他相关的信息。
- 当客户端再次连接时发一个 ID 过来,服务器就在内存里找,找到就直接用主密钥恢复会话状态,跳过证书验证和密钥交换,只用一个消息往返就可以建立安全通信。
- 缺点:服务器保存每一个客户端的会话数据,对于拥有百万、千万级别用户的网站来说存储量就成了大问题,加重了服务器的负担。
Session Ticket:会话票证。下述。
Session ID:

会话票证
由于 Session ID 方案加重了服务器负担,所以出现了另一种方案,Session Ticket(会话票证)。
Session Ticket:会话票证。
- 存储的责任由服务器转移到客户端,即是服务器会对会话记录进行加密(如对称主秘钥、加密算法等等)得到的 Ticket ,然后用 New Session Ticket 消息发给客户端,让客户端保存。
- 重连的时候,客户端使用扩展 session_ticket 发送 Ticket 而不是 Session ID,服务器解密后验证有效期,就可以恢复会话,开始加密通信。
- 不过 Session Ticket 方案需要使用一个固定的密钥文件(ticket_key)来加密 Ticket,为了防止密钥被破解,保证“前向安全”,密钥文件需要定期轮换。
预共享密钥
Pre-shared Key,简称为“PSK”,预共享密钥。
False Start、Session ID、Session Ticket 等方式只能实现 1-RTT,而 TLS1.3 的 PSK 更进一步实现了 0-RTT。
原理和 Session Ticket 差不多,但在发送 Ticket 的同时会带上应用数据(Early Data),免去了服务器确认步骤。

注意:
PSK 也不是完美的,它为了追求效率而牺牲了一点安全性,容易受到 重放攻击(Replay attack)的威胁。黑客可以截获 PSK 的数据,像复读机那样反复向服务器发送。
- 解决:在消息里加入时间戳、nonce 验证,或者 一次性票证 限制重放。
【http】https加速优化的更多相关文章
- 详解全站 HTTPS 访问优化
HTTPS 协议就是 HTTP+SSL/TLS,即在 HTTP 基础上加入 SSL /TLS 层,提供了内容加密.身份认证和数据完整性3大功能,目的就是为了加密数据,用于安全的数据传输. HTTPS ...
- vultr VPS的购买及搭建ss介绍,支持锐速加速优化
Vultr虽然成立时间不久,但是其背景实力还是比较雄厚的,基于全球最大的游戏服务器提供商之一的基础,所以才有实力开设这么多的数据中心.有速度较好的日本东京.洛杉矶等机房,也有我们很多人需要的欧洲机房等 ...
- 基于 Nginx 的 HTTPS 性能优化
前言 分享一个卓见云的较多客户遇到HTTPS优化案例. 随着相关浏览器对HTTP协议的“不安全”.红色页面警告等严格措施的出台,以及向 iOS 应用的 ATS 要求和微信.支付宝小程序强制 HTTPS ...
- 基于 Nginx 的 HTTPS 性能优化实践
前言 分享一个卓见云的较多客户遇到HTTPS优化案例. 随着相关浏览器对HTTP协议的“不安全”.红色页面警告等严格措施的出台,以及向 iOS 应用的 ATS 要求和微信.支付宝小程序强制 HTTPS ...
- SEO方式之HTTPS 访问优化详解
SEO到底要不要做HTTPS?HTTPS对SEO的重要性 正方观点 1.HTTPS具有更好的加密性能,避免用户信息泄露: 2.HTTPS复杂的传输方式,降低网站被劫持的风险: 3.搜索引擎已经全面支持 ...
- HTTPS 接入优化建议
随着网络安全的普及成为共识,部署SSL证书完成HTTPS加密的站点 也随之增多.HTTPS加密能够带来的对身份验证及信息加密等诸多好处,不过想要HTTPS协议发挥更加完美的作用也需要开发者在相应环 ...
- HTTPS 性能优化 -- 基于协议和配置的优化
基于协议和配置的优化 1 前言 上文讲到 HTTPS 对用户访问速度的影响. 本文就为大家介绍 HTTPS 在访问速度,计算性能,安全等方面基于协议和配置的优化. 2 HTTPS 访问速度优化 2.1 ...
- 如何让HTTPS站点评级达到A+? 还得看这篇HTTPS安全优化配置最佳实践指南
0x00 前言简述 SSL/TLS 简单说明 描述: 当下越来越多的网站管理员为企业站点或自己的站点进行了SSL/TLS配置, SSL/TLS 是一种简单易懂的技术,它很容易部署及运行,但要对其进行安 ...
- WordPress网站加速优化,一键免费使用七牛CDN插件
利用wordpress搭建网站是个人建站的主流方案,我曾分享过wordpress网站加速优化必做的十件事,帮助了不少个人站长.今天介绍帮助wordpress网站提升速度至少10倍的免费CDN加速插件: ...
随机推荐
- 使用正则表达式在VS中批量移除 try-catch
使用正则表达式在VS中批量移除 try-catch 前言 try-catch 意为捕获错误,一般在可能出错的地方使用(如调用外部函数或外部设备),以对错误进行正确的处理,并进行后续操作而不至于程序直接 ...
- session与cookie的联系与区别
一.Session与Cookie介绍 这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你 ...
- 定要过python二级 第11套
1. 2.乃至好的代码片段与解决方法,我保存在了 H:盘中python中的:H:\python\python二级好的代码片段与错误解决 3.接着第一个点,为什么print(read(f)) 把f 放 ...
- Linux如何配置网络ip?
Linux如何配置网络ip? 1.首先切换至root用户 su root 输入root用户密码 2.借助dhclient工具自动生成一个网络内可用的ip地址 我们可以手动配置对应的网段的ip地址,但是 ...
- 前端规范之JS代码规范(ESLint + Prettier)
代码规范是软件开发领域经久不衰的话题,几乎所有工程师在开发过程中都会遇到或思考过这一问题.而随着前端应用的大型化和复杂化,越来越多的前端团队也开始重视代码规范.同样,前段时间,笔者所在的团队也开展了一 ...
- 学习Tomcat(五)之Context和Wrapper容器
前面的文章中,我们介绍了Tomcat的Engine和Host容器,我们知道一个Tomcat最多只有一个Engine容器,一个Engine容器可以包含多个Host容器,请求中的不同的Host对应不用的H ...
- 我的Python学习记录
Python日期时间处理:time模块.datetime模块 Python提供了两个标准日期时间处理模块:--time.datetime模块. 那么,这两个模块的功能有什么相同和共同之处呢? 一般来说 ...
- MySQL8.0.20安装教程,MySQL8.0.20安装详细图文教程
1.下载链接如下: MySQL8.0.20版本 https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-20.html 其他版本:MySQL8 ...
- oracle数据导入"HIST_GRAM_LIST_ITEM"问题处理
1.问题显示 处理对象类型 SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT ORA-39083: 对象类型 REF_CONSTRAINT 创建失败, 出现错 ...
- 从零入门 Serverless | Serverless 应用如何管理日志 & 持久化数据
作者 | 竞霄 阿里巴巴开发工程师 本文整理自<Serverless 技术公开课>,关注"Serverless"公众号,回复"入门",即可获取 Se ...