转:HTTPS 协议

做者简介:罗成 腾讯云资深研发工程师
1、微信小程序接入的困境
农历新年将至,微信小程序也如期发布,开发者在接入微信小程序过程当中,会遇到如下问题:
小程序要求必须经过 HTTPS 完成与服务端通讯,若开发者选择自行搭建 HTTPS 服务,那须要自行 SSL 证书申请、部署,完成 https 服务搭建,效率低流程冗长;且 HTTPS 的 SSL 加解析,对服务器的 CPU 有极大的开销。
不只仅是小程序,苹果 iOS 平台,Google Android 在 2017 也逐步强制要求开发者使用 HTTPS 接入。HTTPS 彷佛是一个绕不开的门槛,让很多开发者头痛不已。
针对以上问题,腾讯云的负载均衡服务(cloud load balance),但愿经过对 HTTPS 的性能优化,提供一键式的 SSL 证书申请服务,下降 HTTPS 的应用门槛和使用成本,让开发者能快速接入微信小程序等服务。首先,先让咱们看看 HTTP 与 HTTPS 的对比,逐一解开您的谜团。
2、为何要接入 HTTPS—HTTP 的安全风险
HTTP 协议是一个很是简单和高效的协议,互联网大部分的主流应用默认都是使用的HTTP。因为性能和上个世纪 90 年代使用环境的限制,HTTP 协议自己并非一个为了安全设计的协议,既没有身份认证,也没有一致性检验,最头疼的是,HTTP 全部的内容都是明文传输的。
另一方面,互联网的发展也是突飞猛进,各类 HTTP 应用不断地渗透到人们生活的方方面面。无论是社交、购物、金融、游戏、仍是搜索,这些 HTTP 服务都能带给人们极大的便捷,提高生活质量和效率。
显然,HTTP 和人们生活及经济利益密切相关,遗憾的是,它不安全。也就意味着这里一 定潜藏着巨大的安全隐患。这些隐患又集中表如今以下两方面:
一、隐私泄露
因为 HTTP 自己是明文传输,用户和服务端之间的传输内容都能被中间者查看。也就是说 你在网上搜索、购物、访问的网点、点击的页面等信息,均可以被「中间人」获取。因为国人大多不过重视隐私的保护,这里的风险比较隐性,伤害后果也不太好定量评估。已知的一些比较严重的隐私泄露事件包括:
  1. QQ 登录态被不法分子窃取,而后在异地登录,进行广告和欺诈行为。
  2. 用户手机号和身份信息泄露。
  3. 用户网上行为泄露。好比搜索了一所医院,很快就会有人打电话进行推广(非效果广告)。
二、页面劫持
隐私泄露的风险比较隐蔽,用户基本感知不到。但另一类劫持的影响就很是明显很是直接了——页面劫持,也就是直接篡改用户的浏览页面。有不少页面劫持很简单粗暴,直接插入第三方广告或者运营商的流量提示信息。
但也有一些劫持作得比较隐蔽,好比下面的京东页面劫持:其中上图是使用 HTTP 方面的页面,顶部箭头所示的地方出现了一个购物推荐,很逼真,就像京东或者浏览器官方的工具。
但换成 HTTPS 访问,就没有这个工具页面,显然是被劫持了。
三、劫持路径及分类
那劫持究竟是如何产生的呢?从技术上来说比较简单,在内容通过的地方进行监听篡改就好了。但要想把整个劫持的产业链条摸清楚,须要深刻黑产内部,比较困难。有一点能够确定的是,劫持大部分都是在中间的网络节点发生的,又叫「中间人」(MITM, man in the middle)。以下图所示:
因为信息传输都须要通过上述的「中间人节点」,它们又拥有信息的读写权限,若是信息没有加密,也没有校验,那么想要查看隐私,篡改页面,对于「中间人」来讲可谓是垂手可得。
那劫持又有哪些主要的分类呢?根据劫持路径划分的话,主要是下图所示的三类:
DNS 劫持,客户端劫持和链路劫持。 根据咱们的不彻底统计,业务遇到的绝大部分劫持 (90%)都属于链路劫持。
3、HTTPS 是解决链路劫持的核武器
HTTPS 为何能很好的解决链路劫持呢?主要是三大武器:
一、身份认证—防假冒,防抵赖
每次创建一个全新的 HTTPS 链接时,都须要对身份进行认证,确保用户访问的是正确的目的网站。
二、内容加密—防窃听
内容加密意味端对端的通讯内容全都是密文,中间人没法直接查看到明文,HTTPS 全部的应用层内容都是经过对称加密来实现加密和解密的。
三、一致性校验—防篡改
经过对数据和共享密钥的 MAC 码来防止中间者篡改消息内容,确保数据的一致性。
4、HTTPS 普及之痛
事实上 HTTPS 1995 年就诞生了,是一个很是古老、成熟的协议。同时又能很好地防止内容劫持,保护用户隐私。可是为何一直到今天,还有大部分的网站不支持 HTTPS,只使用 HTTP 呢?
影响 HTTPS 普及的主要缘由能够归纳为两个字:「慢」和「贵」。
一、慢
在未经任何优化的状况下,HTTPS 会严重下降用户的访问速度。主要因素包括:
  1. 网络耗时。因为协议的规定,必需要进行的网络传输。好比 SSL 彻底握手,302 跳转等。最坏状况下可能要增长 7 个 RTT。
  1. 计算耗时。不管是客户端仍是服务端,都须要进行对称加解密,协议解析,私钥计算,证书校验等计算,增长大量的计算时间。
二、贵
HTTPS 的贵,主要体如今以下三方面:
  1. 服务器成本。HTTPS 的私钥计算会致使服务端性能的急剧降低,甚至不到 HTTP 协议的十分之一,也就是说,若是 HTTP 的性能是 10000cps,HTTPS 的性能可能只有几百 cps,会增长数倍甚至数十倍的服务器成本。
  2. 证书成本。根据证书个数及证书类型,一年可能须要花费几百到几百万不等的证书成本。
  3. 开发和运维成本。HTTPS 协议比较复杂,openssl 的开源实现也常常发生安全BUG, 包括协议的配置,证书的更新,过时监控,客户端的兼容等一系列问题都须要具有专业背景的技术人员跟进处理。
5、腾讯云负载均衡器 HTTPS 的性能优化
腾讯云负载均衡器深针对 HTTPS 推广应用过程当中的痛点进行了深度优化。接下来咱们详细地介绍下这些优化方案:
一、访问速度的优化
前文提到 HTTPS 很是慢,咱们也主要从两个层面对访问速度进行了优化: 协议栈和先后端资源。
全链路协议栈优化
HTTPS 能够认为是 HTTP over SSL,而 HTTPS 又是使用 TCP 协议进行传输,因此整个协议栈的优化涉及到三个层面:
  1. TCP 优化。包括拥塞窗口的调整,tcp fast open,reuseport 的支持,最新的 BBR 拥塞控制算法的支持等。
  1. SSL 协议优化。分布式 session cache, session ticket,False start, ocsp stapling file, 动态 record size 等。
SSL 协议优化最重要的目标仍是提高简化握手的比例。腾讯云经过实现全局 session cache 和全局 session ticket 来提高 SSL 的简化握手比例,节省用户访问时间和计算资源。
  1. 应用层协议优化。同时支持 SPDY,HTTP2,HSTS 等。
HTTP2 相比 HTTP1.X 最大的优点就是多路复用,可以将多个 HTTP 请求经过一个 TCP 链接并行发送,相比 HTTP1.X 的串行发送,性能无疑是提高不少。
因为 HTTP2 是从 SPDY 继承发展出来的,因此部分较老的客户端只支持 SPDY,不支持 HTTP2。而大部分新客户端,只支持 HTTP2,不支持 SPDY。为了同时兼容新老客户端的性能,腾讯云同时支持 SPDY 和 HTTP2,最大化提高新老版本客户端的性能。
先后端优化
HTTP2 及 SPDY 最大的特性和优点就是多路复用,可以将多个请求经过一个链接并行发送出来。这个特性虽然很强大,可是若是还使用传统的 HTTP 优化策略,多路复用的效果会颇有限。好比域名分片,pipline 等都会影响多路复用的效果。因而咱们又经过屡次的数据实验,调整了一些前端资源包括后端接入的策略:
  1. 域名收归。经过页面资源及性能分析,确实域名收归方案,好比移动页面不超过 3 个。
  2. 预建链接。STGW 提供预链接页面,经过对热点页面的用户行为进行分析,提早创建链接,减小协议开销对用户体验的影响。
  3. 经过腾讯云遍及全球的 CDN 及 IDC 节点就近完成 HTTPS 卸载。
二、计算性能优化
针对 HTTPS 的计算性能,腾讯云主要从三个层面进行了优化,包括:
  1. 尽可能减小彻底握手的发生,提高简化握手比例。好比前文提到的全局 sessioncache 和 session ticket。
  2. 对于不可避免的彻底握手,腾讯云实现了 RSA 异步代理计算,经过对协议栈的改造和 SSL 硬件加速卡的使用,大幅度提高了 HTTPS 的计算能力和防攻击能力。
  3. 对称加密计算过程也进行了场景使用上的优化。
下面再详细介绍一下:
RSA 异步代理计算
腾讯云针对 HTTPS 性能消耗最严重的环节——非对称密钥交换算法进行了重点优化。优化思路主要包括以下三部分:
  1. 算法分离。就是将最消耗 CPU 资源的算法剥离出来,不让消耗本地的 CPU 资源。
  2. 代理计算。使用空闲的 CPU 机器或者专门的 SSL 硬件加速卡来完成 RSA 计算。
  3. 异步执行。传统的 openssl 在进行 RSA 的时候,上层应用,好比 NGINX 都须要同步等待。这一步骤也很是影响,必需要进行异步改造,这样在加速集群进行 RSA 计算的时候,接入服务器也能够接入其余用户的请求,提高吞吐能力。
经过对 openssl 握手协议栈的深度改造以及 SSL 硬件加速卡的 RSA 计算性能,腾讯云 CLB 的 SSL 计算能力提高了 350%。单机 ECDHE_RSA 处理性能达到了 65000 cps。
对称加密算法的自动最优选择
腾讯云根据应用场景匹配最优的对称加密算法:
  1. 对于视频等流媒体内容,优先使用 aes-gcm。
  2. 针对不支持 aes-ni 硬件加速指令的移动终端,使用 chacha20-poly1305 。
  3. 针对 IE6 等古董级别的客户端,使用 RC4 算法。
三、协议的并行卸载
腾讯云 CLB 支持如今主流的所有 HTTP 类协议接入和卸载。包括:
  1. http1.0/http1.1
  2. http2 及前身 spdy3.1
  3. https,包括 ssl3.0, tlsv1.0,tlsv1.1,tlsv1.2
  4. websocket 及 secure websocket。
  5. tcp,udp 透明转发。
CLB 可以将上述七层协议统一转换成 HTTP1.1,透传给业务。对业务的好处也很是明显: 0 开发成本就能使用 HTTPS 和 HTTP2,极大减小了适配各类协议和客户端的压力。
四、安全
安全涉及的领域和场景很是庞大,HTTPS 虽然可以完全解决链路劫持,可是对于以下两类问题却无能为力:
  1. CC 攻击,特别是 HTTPS 计算型攻击,HTTPS 的性能会急剧下降,引入更大的安全风险。
  2. 业务安全,包括 SQL 注入,XSS 跨站、网站挂马等。
上述两类都是常常困扰业务的风险极大的安全问题。
针对上述问题,腾讯云也设计实现了一套针对 HTTPS 的防 CC 和 WAF 的安全系统,可以有效地防护这类安全风险。
Keyless(无密钥加载)
私钥的重要性
对证书稍微熟悉的朋友都知道,SSL 密钥和证书都是成对使用的,一个证书必定惟一对应一个私钥。整个 HTTPS 最重要的一个数据就是 SSL 的私钥了,若是私钥泄露,整个握手过程就能够被劫持,签名能够被伪造,对称密钥也能够被破解。整个 HTTPS 就毫无安全可言。
传统的私钥使用方案和风险
传统的私钥方案就是将私钥和应用程序绑定在一块儿。好比你们熟知的 nginx, apache,若是想使用 HTTPS,必须在部署 nginx 的接入机器上部署相关的证书和私钥。
这种方案会有以下安全上的问题: 私钥部署在云端或者 CDN,若是泄露了怎么办?
无秘钥方式
虽然腾讯云的内网很是安全,可是出于对客户的安全负责,完全打消用户对私钥泄露的顾 虑,确保用户对私钥的绝对控制,腾讯云提供一种无私钥的加载方案。这个方案核心是 「不须要把私钥存储在腾讯云,容许用户使用本身的服务器保管私钥,完成 HTTPS 的接入」。 腾讯云彻底接触不到私钥,客户甚至能够把私钥保存在本身家里的服务器上。
它的接入过程以下:
  1. 用户发起 HTTPS 握手请求。
  2. 在涉及到私钥计算的时候,腾讯云 CLB 会将这个私钥计算请求经过加密的自定义协议,转发给用户本身的 keyless 服务器上。
  3. keyless 服务调用用户的私钥完成计算。
  4. keyless 服务将计算结果返回给腾讯云 CLB。
  5. CLB 继续进行 HTTPS 请求的处理。
整个过程, 腾讯云接触不到 HTTPS 私钥,须要注意一点的,keyless server 是腾讯云提供一个服务端程序,代码开源,用户自主部署,服务端行为用户掌握得一清二楚。
6、零门槛,HTTPS 快速接入微信小程序
腾讯云 CLB 负载均衡器经过对协议栈及服务端的深度优化,实现了 HTTPS 性能的巨大提高。同时,咱们也经过与国际上著名的证书机构合做,极大下降了证书的成本。腾讯云 CLB 在以下几个方面,可以为微信小程序接入带来很是显著的收益:
  1. 提供一键式的 SSL 证书申请,CLB 负载均衡服务做为 HTTPS 代理,减轻开发负担,让开发者能够专一小程序业务的开发。
  2. 使用 HTTPS 并不会下降 client 端的访问速度。HTTP、HTTPS 访问时延几乎一致。
  3. 集群内单台服务器 SSL 加解密性能,高达 6.5Wcps 的彻底握手。相比高性能CPU 提高了至少 3.5 倍,节省了服务端成本,极大提高了业务运营及流量突涨时的服务能力, 加强了计算型防攻击的能力。
  4. 支持多种协议卸载及转换。减小业务适配客户端各类协议的压力,业务后端只须要支持 HTTP1.1 就能使用 HTTP2,SPDY,SSL3.0,TLS1.2 等各版本协议。知足微信小程序,iOS 平台等对协议的要求。
  5. SSL 证书申请、监控、替换。咱们和国际顶级的证书厂商 comodo,symantec 已有深刻合做,服务体系完善。
  6. 防 CC 及 WAF 功能。可以有效杜绝慢链接、高频定点攻击、SQL 注入、网页挂马等应用层攻击。
相关文章
相关标签/搜索