写点什么

大型网站的 HTTPS 实践(三)——HTTPS 对性能的影响

  • 2019-09-11
  • 本文字数:2082 字

    阅读完需:约 7 分钟

大型网站的HTTPS实践(三)——HTTPS对性能的影响

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

HTTPS 对访问速度的影响

在介绍速度优化策略之前,先来看下 HTTPS 对速度有什么影响。影响主要来自两方面:协议交互所增加的网络 RTT(round trip time)和加解密相关的计算耗时。下面分别介绍一下。

1 网络耗时增加

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


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



图 1 HTTP 首个请求的网络耗时


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


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



图 2 HTTPS 首次请求对访问速度的影响


HTTPS 首次请求需要的网络耗时解释如下:


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


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


a.大部分情况下用户不会手动输入https://www.baidu.com来访问HTTPS,服务端只能返回302强制浏览器跳转到HTTPS。
b.浏览器处理302跳转也需要耗时。
复制代码


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


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


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


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


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


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


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


a.浏览器获取到证书后,有可能需要发起OCSP或者CRL请求,查询证书状态。
b.浏览器首先获取证书里的CA域名。
c.如果没有命中缓存,浏览器需要解析CA域名的DNS。
复制代码


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


a.DNS解析到IP后,需要完成三次握手建立TCP连接。
复制代码


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


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


a.完全握手阶段二主要是密钥协商。
复制代码


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。

2 计算耗时增加

上节还只是简单描述了 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 以上。


##总结


HTTPS 在保证数据安全性的同时,对服务性能也造成了一些影响。在本文中,我们着重介绍了 HTTPS 从网络耗时和加密解密两方面对于服务性能的影响。在下一篇系列文章中,我们将为大家带来百度在减小 HTTPS 对性能影响方面的方法和经验。


本文转载自公众号 AIOps 智能运维(ID:AI_Ops)。


原文链接:


https://mp.weixin.qq.com/s/HvpPvs5mHQ80NEnssxshHQ


2019-09-11 18:251844

评论

发布
暂无评论
发现更多内容

react源码解析12.状态更新流程

全栈潇晨

React

ONES CTO 冯斌 | 升级项目管理体系,加速金融行业数字化转型

万事ONES

项目管理 研发管理 数字经济 ONES

详解Vue八大生命周期钩子函数

华为云开发者联盟

Vue 对象 函数 Vue实例 八大生命周期

【Vue2.x 源码学习】第十四篇 - 生成 ast 语法树 - 模板解析

Brave

源码 vue2 6月日更

让前端小姐姐愉快地开发表单

蛋先生DX

vue.js 表单 动态表单 6月日更

【译】JavaScript 代码整洁之道-概述篇

KooFE

JavaScript 大前端 6月日更 整洁代码

EMQ映云科技边缘计算里程碑—Kuiper加入LF Edge基金会

EMQ映云科技

开源 云端 边缘流式数据 emq LF Edge

Java中生成随机数的4种方式!

王磊

Java 随机数

缓存的世界Redis(一)

卢卡多多

redis 缓存 6月日更

浪潮云说丨云应用容灾:四大关键能力,护航业务连续性

云计算

Java 字符串 split 踩坑记

mghio

6月日更

你有一份Rx编程秘籍请签收

vivo互联网技术

响应式编程 大前端 函数编程 RXJS

Apache Drill 1.19.0 发布集锦

MPP Apache Drill 联邦查询和分析

【21-7】Grafana如何配置Thanos 查询历史数据

耳东@Erdong

Grafana Prometheus Thanos query 6月日更

【Flutter 专题】127 图解基础 Image 小组件

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

云图说|华为云自研云数据库GaussDB NoSQL,兼容多款NoSQL接口的数据库服务

华为云开发者联盟

nosql Influxdb Cassandra mongo GaussDB NoSQL

你应该知道的数仓安全

华为云开发者联盟

数据加密 数仓安全 透明加密 SQL函数加密

什么是Python中的套接字编程?

华为云开发者联盟

Python 编程 socket 网络 套接字

算法之异位词字符处理

Skysper

算法

[译] Android 的 Java 9,10,11,12 的支持

Antway

6月日更

EasyRecovery用法进阶--高阶设置使用技巧

淋雨

数据恢复 EasyRecovery 文件恢复 硬盘恢复

推荐学Java——应该了解的前端内容

逆锋起笔

Java 大前端 后端 JAVA开发

Go 语言学习路线来啦

roseduan

学习 Go 语言

【LeetCode】山脉数组的峰顶索引Java题解

Albert

算法 LeetCode 6月日更

并发王者课-黄金3:雨露均沾-不要让你的线程在竞争中被“饿死”

MetaThoughts

Java 多线程 并发 并发王者课

Pandas高级教程之:Dataframe的重排和旋转

程序那些事

Python 数据分析 pandas 程序那些事

docker搭建Nginx和Tomcat负载均衡

叫我阿柒啊

nginx Docker 负载均衡

ONES CTO 冯斌 | 大型软件研发团队如何实践高效项目管理?

万事ONES

团队管理 ONES Project 研发团队

ARTS 打卡第11周

steve_lee

网络安全逐渐成为程序员的必备技能

学神来啦

Linux 程序员 安全 渗透

极光开发者周刊【No.0611】

极光JIGUANG

大型网站的HTTPS实践(三)——HTTPS对性能的影响_文化 & 方法_百度HTTPS_InfoQ精选文章