大型网站HTTPS实践:HTTPS对性能的影响

作者 | 百度HTTPS技术支持团队

百度已经上线了全站 HTTPS 的安全搜索,默认会将 HTTP 请求跳转成 HTTPS。百度 HTTPS性能优化涉及到大量内容,从前端页面、后端架构、协议特性、加密算法、流量调度、架构和运维、安全等方面都做了大量工作。本系列的文章将对此一一进行介绍。关注 OpenWeb开发者公众号,回复“HTTPS”,即可查看相关文章。

HTTPS 在保护用户隐私,防止流量劫持方面发挥着非常关键的作用,但与此同时,HTTPS 也会降低用户访问速度,增加网站服务器的计算资源消耗。本文主要介绍 HTTPS 对用户体验的影响。

HTTPS 对访问速度的影响

在介绍速度优化策略之前,先来看下 HTTPS 对速度有什么影响。影响主要来自两方面:

1、协议交互所增加的网络 RTT(round trip time)。

2、加解密相关的计算耗时。

下面分别介绍一下。

网络耗时增加

由于 HTTP 和 HTTPS 都需要 DNS 解析,并且大部分情况下使用了 DNS 缓存,为了突出对比效果,忽略主域名的 DNS 解析时间。

用户使用 HTTP 协议访问 http://www.baidu.com(或者 www.baidu.com) 时会有如下网络上的交互耗时:
HTTP 首个请求的网络耗时

可见,用户只需要完成 TCP 三次握手建立 TCP 连接就能够直接发送 HTTP 请求获取应用层数据,此外在整个访问过程中也没有需要消耗计算资源的地方。

接下来看 HTTPS 的访问过程,相比 HTTP 要复杂很多,在部分场景下,使用 HTTPS 访问有可能增加 7 个 RTT。如下图:

HTTPS 首次请求对访问速度的影响
HTTPS 首次请求需要的网络耗时解释如下:

1、三次握手建立 TCP 连接。耗时一个 RTT。

2、使用 HTTP 发起 GET 请求,服务端返回 302 跳转到 https://www.baidu.com 。需要一个 RTT 以及 302 跳转延时。

大部分情况下用户不会手动输入 https://www.baidu.com 来访问 HTTPS,服务端只能返回 302 强制浏览器跳转到 https。

浏览器处理 302 跳转也需要耗时。

3、三次握手重新建立 TCP 连接。耗时一个 RTT。

302 跳转到 HTTPS 服务器之后,由于端口和服务器不同,需要重新完成三次握手,建立 TCP 连接。

4、TLS 完全握手阶段一。耗时至少一个 RTT。

这个阶段主要是完成加密套件的协商和证书的身份认证。

服务端和浏览器会协商出相同的密钥交换算法、对称加密算法、内容一致性校验算法、证书签名算法、椭圆曲线(非 ECC 算法不需要)等。

浏览器获取到证书后需要校验证书的有效性,比如是否过期,是否撤销。

5、解析 CA 站点的 DNS。耗时一个 RTT。

浏览器获取到证书后,有可能需要发起 OCSP 或者 CRL 请求,查询证书状态。

浏览器首先获取证书里的 CA 域名。

如果没有命中缓存,浏览器需要解析 CA 域名的 DNS。

6、三次握手建立 CA 站点的 TCP 连接。耗时一个 RTT。

DNS 解析到 IP 后,需要完成三次握手建立 TCP 连接。

7、发起 OCSP 请求,获取响应。耗时一个 RTT。

8、完全握手阶段二,耗时一个 RTT 及计算时间。

完全握手阶段二主要是密钥协商。

9、完全握手结束后,浏览器和服务器之间进行应用层(也就是 HTTP)数据传输。

当然不是每个请求都需要增加 7 个 RTT 才能完成 HTTPS 首次请求交互。大概只有不到 0.01% 的请求才有可能需要经历上述步骤,它们需要满足如下条件:

1、必须是首次请求。即建立 TCP 连接后发起的第一个请求,该连接上的后续请求都不需要再发生上述行为。

2、必须要发生完全握手,而正常情况下 80% 的请求能实现简化握手。

3、浏览器需要开启 OCSP 或者 CRL 功能。Chrome 默认关闭了 ocsp 功能,firefox 和 IE 都默认开启。

4、浏览器没有命中 OCSP 缓存。Ocsp 一般的更新周期是 7 天,firefox 的查询周期也是 7 天,也就说是 7 天中才会发生一次 ocsp 的查询。

5、浏览器没有命中 CA 站点的 DNS 缓存。只有没命中 DNS 缓存的情况下才会解析 CA 的 DNS。

计算耗时增加。

上节还只是简单描述了 HTTPS 关键路径上必须消耗的纯网络耗时,没有包括非常消耗 CPU 资源的计算耗时,事实上计算耗时也不小(30ms 以上),从浏览器和服务器的角度分别介绍一下:

1、浏览器计算耗时

RSA 证书签名校验,浏览器需要解密签名,计算证书哈希值。如果有多个证书链,浏览器需要校验多个证书。

RSA 密钥交换时,需要使用证书公钥加密 premaster。耗时比较小,但如果手机性能比较差,可能也需要 1ms 的时间。

ECC 密钥交换时,需要计算椭圆曲线的公私钥。

ECC 密钥交换时,需要使用证书公钥解密获取服务端发过来的 ECC 公钥。

ECC 密钥交换时,需要根据服务端公钥计算 master key。

应用层数据对称加解密。

应用层数据一致性校验。

2、服务端计算耗时

RSA 密钥交换时需要使用证书私钥解密 premaster。这个过程非常消耗性能。

ECC 密钥交换时,需要计算椭圆曲线的公私钥。

ECC 密钥交换时,需要使用证书私钥加密 ECC 的公钥。

ECC 密钥交换时,需要根据浏览器公钥计算共享的 master key。

应用层数据对称加解密。

应用层数据一致性校验。

由于客户端的 CPU 和操作系统种类比较多,所以计算耗时不能一概而论。手机端的 HTTPS 计算会比较消耗性能,单纯计算增加的延迟至少在 50ms 以上。PC 端也会增加至少 10ms 以上的计算延迟。

服务器的性能一般比较强,但由于 RSA 证书私钥长度远大于客户端,所以服务端的计算延迟也会在 5ms 以上。

结束语

本系列的后续文章将进一步解释针对性的优化措施。关注OpenWeb微信公众号,回复“HTTPS”,即可查看本系列文章。

Brilliant Open Web

BOW(Brilliant Open Web)团队,是一个专门的Web技术建设小组,致力于推动 Open Web 技术的发展,让Web重新成为开发者的首选。

BOW 关注前端,关注Web;剖析技术、分享实践;谈谈学习,也聊聊管理。

关注 OpenWeb开发者,回复“加群”,让我们一起推动 OpenWeb技术的发展!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535876.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Redis(十三):Redis实现乐观锁

1、悲观锁与乐观锁 乐观锁和悲观锁是一种程序设计思想,而不是具体的代码。乐观锁和悲观锁应用的场景有很多,在数据库和多线程等等都会用到。 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次…

PWA将带来新一轮大前端技术洗牌?

作者 | 彭星 编辑 | 尾尾 一、回顾历史:移动时代之初,Web遭遇两大枷锁 Web 在移动时代遭遇两大枷锁1.Web 在移动时代遭遇两大枷锁 当 Web 自信满满,步入移动时代之时,它还没有做好充足的准备。 回顾 2014 到 2015 年那段时间…

Redis(十四):Jedis

Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件&#xff0c;必须对Jedis熟悉才能写成漂亮的代码&#xff01; 1、新建Maven工程&#xff0c;导入对应依赖 <dependencies><dependency><groupId>redis.clients</groupId>&l…

高级精致智能快捷的Web设计原则案例

作者 | 百度搜索用户体验中心 《Web设计指南》分为设计原则、基础规范两方面主要内容&#xff0c;同时会提供相应的实际案例及资源下载。关注OpenWeb开发者&#xff0c;回复“设计指南”&#xff0c;即可获取已发布资源。 设计原则之高级精致 简洁并不等于粗糙没有细节&#x…

Linux系列(一):简介与目录结构

1、Linux简介 1.1、起源 Linux出现于1991年&#xff0c;是由芬兰赫尔辛基大学学生Linus Torvalds和后来加入的众多爱好者共同开发完成 1.2、Linux特点 多用户&#xff0c;多任务&#xff0c;丰富的网络功能&#xff0c;可靠的系统安全&#xff0c;良好的可移植性&#xff0c;…

日常问题——解决mac下 ssh: connect to host localhost port 22: Connection refused

问题描述&#xff1a; 今天使用ssh 登陆本地时即使用ssh localhost出现了 ssh: connect to host localhost port 22: Connection refused 错误&#xff01; 然后在网上看了很多的解决方案&#xff0c;也都是千篇一律&#xff0c;大多数是针对ssh安没安装的&#xff1f;那肯定是…

大型网站的HTTPS实践:基于协议和配置的优化

作者 | 百度HTTPS技术支持团队 百度已经上线了全站 HTTPS 的安全搜索&#xff0c;默认会将 HTTP 请求跳转成 HTTPS。百度 HTTPS性能优化涉及到大量内容&#xff0c;在前端页面、后端架构、协议特性、加密算法、流量调度、架构和运维、安全等方面都做了大量工作。本系列的文章将…

初识Hadoop:大数据与Hadoop概述

1、大数据概述 大数据&#xff08;big data&#xff09;&#xff0c;IT行业术语&#xff0c;是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信…

W3C近期要闻:W3C战略重点报告新版发布

作者 | W3C中国 「OpenWeb开发者」依托于BOW&#xff08;Brillant Open Web&#xff09;团队&#xff0c;是一个专门的 Web 技术建设小组&#xff0c;致力于推动 OpenWeb 技术的发展&#xff0c;将不定期为读者同步W3C要闻。 注&#xff1a;由于微信不支持外链&#xff0c;了解…

Hadoop的安装及配置

PS:最新安装教程请参考Hadoop的安装与配置&#xff08;设置单节点群集&#xff09;详细教程 1、Hadoop安装前准备工作&#xff1a; 在开始Hadoop安装与配置之前&#xff0c;需要准备的环境&#xff1a;Linux系统、配置JDK环境变量。 2、安装 我们可以到Apache Hadoop的官网ht…

在 PWA 中使用 App Shell 模型提升性能和用户感知体验

作者&#xff5c;潘宇琪 编辑&#xff5c;Daisy 在构建 PWA 应用时&#xff0c;使用 App Shell 模型能够在视觉和首屏加载速度方面带来用户体验的提升。另外&#xff0c;在配合 Service Worker 离线缓存之后&#xff0c;用户在后续访问中将得到快速可靠的浏览体验。 在实践过…

【转】超酷的 mip-infinitescroll 无限滚动(无限下拉)

写在前面 无限滚动技术&#xff08;又叫做无限下拉技术&#xff09;被广泛应用于新闻类&#xff0c;图片预览类网站。对用户来讲&#xff0c;使用无限滚动的页面有源源不断的信息可以预览&#xff0c;增加用户在页面的停留时长。技术上原理也很简单&#xff0c;在页面加载时加…

日常问题——Mac下新建目录报Read-only file system

问题描述&#xff1a; 今天在根目录下&#xff0c;新建目录时出现了Read-only file system提示为只读的错误。电脑最近并没有非正常关机之类可能导致文件损伤的操作&#xff0c;但是最近倒是进行了一次系统更新。 解决方案&#xff08;过程&#xff09;&#xff1a; 从系统更…

MongoDB(二):MongoDB的安装

这里以OSX系统为例&#xff0c;window和linux可以参考https://www.runoob.com/mongodb/mongodb-linux-install.html 1、我们使用 curl 命令来下载安装&#xff1a; # 进入 /usr/local cd /usr/local# 下载 sudo curl -O https://fastdl.mongodb.org/osx/mongodb-osx-ssl-x86_…

百度推出 MIP Baidu Path链接

在站长将站点 MIP 化时&#xff0c;需要关注 URL 的一共有三个&#xff1a;MIP URL, MIP-Cache URL 以及 MIP Baidu Path。 从 URL 说起 在互联网中&#xff0c;URL 定义页面的地址&#xff0c;每个 URL 对应一个页面。而 MIP URL 则是 MIP 页的原始地址&#xff0c;指向托管…

Postman接口测试(超详细整理)

常用的接口测试工具主要有以下几种 Postman&#xff1a;简单方便的接口调试工具&#xff0c;便于分享和协作。具有接口调试&#xff0c;接口集管理&#xff0c;环境配置&#xff0c;参数化&#xff0c;断言&#xff0c;批量执行&#xff0c;录制接口&#xff0c;Mock Server, …

mip-link 组件功能升级说明

背景描述 某个页面被多少页面引用&#xff08;在其他页面上有指向这个页面的 a 标签&#xff09;&#xff0c;是搜索引擎判断这个页面价值的其中一个因子。这里的搜索引擎不只是指百度&#xff0c;还包括国内外其他的搜索引擎。 MIP 在最初设计 MIP url 跳转逻辑实现时&#…

日常问题——使用Xshell 连接虚拟机报错 Disconnected from remote host

问题描述&#xff1a; 使用Xshell进行连接虚拟机的操作时出现了Disconnected from remote host的错误&#xff01; 解决方案&#xff08;过程&#xff09;&#xff1a; 1、vim /etc/ssh/sshd_config 2、#UseDNS yes改为UseDNS no 3、重启service sshd restart 问题解决&…

【转】AB实验设计思路及实验落地

这篇文章会讨论&#xff1a; 1. 在什么情况下需要做 AB 实验 2. 从产品/交互角度&#xff0c;如何设计一个实验 3. 前端工程师如何打点 4. 如何统计数据&#xff0c;并保证数据准确可信 5. 如何分析实验数据&#xff0c;有哪些数据需要重点关注 6. 附&#xff1a;如何搭建…

简单实现MySQL数据实时增量同步到Kafka————Maxwell

任务需求&#xff1a;将MySQL里的数据实时增量同步到Kafka 1、准备工作 1.1、MySQL方面&#xff1a;开启BinLog 1.1.1、修改my.cnf文件 vi /etc/my.cnf [mysqld] server-id 1 binlog_format ROW1.1.2、重启MySQL,然后登陆到MySQL之后&#xff0c;查看是否已经修改过来: …