超详解析 | CDN HTTPS优化实践,全网一分钟生效

本文涉及的产品
云解析 DNS,旗舰版 1个月
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

目前主流网站都依赖 HTTPS(HTTP over TLS/SSL)实现服务器认证、数据加密和完整性保护,比如2015年阿里巴巴旗下所有网站就完成全站HTTPS化;同时主流网站也普遍使用CDN技术用以提高网站的性能、可靠性和安全性。目前,HTTPS和CDN技术几乎都已成为商业网站必须的基础服务。

然而长期以来,HTTPS和CDN两种技术的设计和发展是独立的,HTTPS 设计之初是一种端到端(End-to-End)的协议,而CDN却是以中间人(Man in the Middle)的方式工作。原始网站是如何授权给中间的CDN厂商、如何完成浏览器 - CDN - 原始网站之间的身份认证、秘钥交换和数据保护,以及如何撤销这种授权,无论学术界还是工业在以前都没有没有系统性的考虑。

总的来说HTTPS是未来的趋势。它的应用会越来越广泛,CDN也就需要对此做出相应的变化。

近日,在阿里云栖社区2017在线技术峰会,阿里云CDN技术专家容恪来为大家解析CDN HTTPS红包背后的技术实践。本文主要从SSL/TLS及HTTP/2开始谈起,着重分析了HTTPS 架构和优化实践,最后对用户如何更好使用 HTTPS做出指导。以下是精彩内容整理:

SSL/TLS及HTTP/2介绍

HTTPS

image

对于HTTPS,其实是在HTTP 之下增加了 SSL/TLS的传输。在整个TCP/IP协议中的结构如图,传输层之上是会话层,会话层中传输的是SSL/TLS协议,HTTP 是在应用层。如果不用 SL/TLS 协议,则 HTTP传输的数据是明文。


image

SSL(Secure Socket Layer)是安全套接层,TLS(Transport Layer Security)是传输层安全协议,建立在SSL3.0协议规范,是 SSL3.0 的后续版本。SSL 直到 3.0版本才大规模的部署和应用。 TLS 版本相比于 SSL 变化明显的是支持的加密算法不同。当前最新使用的是TLS1.2协议。1.3版本还在草案阶段。


image


图为SSL/TLS 握手过程,它在基于TCP的连接已经建立起来后,Client端会把自己的协议版本号以及加密算法还有生成的相关随机数一并发给server,server会选择最终的协议版本和加密算法以及server证书发给Client。Client会对server证书进行验证,校验通过后,两者再去协商密钥,用于后续 HTTPS 数据的加解密。

HTTP/2协议特性

HTTP/2也是非常关键的协议,在2015年已经正式的公布了,它是为了解决HTTP原先版本的低效不安全等问题而产生,并不是为了要完全颠覆HTTP,而是在HTTP基础上做了加强,它的特性有二进制协议,支持头部压缩,多路复用以及服务器推送。服务器推送指在Client端发送请求时,Server端会根据Client请求来做一些判断,会把Client请求中页面包含的一些资源提前推送给Clinet端,提升了传输效率。HTTP/2上更主要的是加强协议的安全性。

image


HTTP/2头已经变成二进制格式,并且分为消息头、消息体都封装成二进制格式传输。

image


头部压缩是HTTP/2中非常重要的特点,它针对同一个Client和一个server之间进行数据传输时,有一些header在多次的请求中是相同的,这样多次请求就会出现多次传输相同的 header。HTTP/2协议针对这种情况对所有header信息建立索引,如果在下一次传输时相同的header直接用索引的编号去传输,这样就不会传输一长串的字符串,减少了网络传输信息量,提升了传输效率。当然,头部压缩也存在一些缺点 ,因为不管是Client端还是server端,都要维持索引表,确定每个索引值对应HTTP header的信息,通过占用更多内存换取数据量传输的减少,也可以认为是通过空间换时间。对于现在内存日益扩大的情况下,增加传输效率才是更重要的。

image

HTTP/2协议多路复用的功能如图,HTTP之前的版本最多支持keep live,可以在一个TCP连接上传输多个HTTP请求,对于最基本的keep live,只能在一个请求传输完进行下一个请求的传输,以及在这个基础上还有pipeline,可以在请求方向上同时传输多个get请求,但都不是真正的多路复用。HTTP/2在 TCP 连接的基础上,增加了stream的概念,每个 stream 都可以处理单独的一个 HTTP 请求。在这个基础上,在一条TCP连接上可以同时传输多个 sream,而且不同 stream都有对应编号。因此就支持了真正的多路复用。

CDN HTTPS架构

Why HTTPS?

HTTPS有效的防止网站内容被篡改被劫持,加强了网站的安全性。当前的一些形势也对 HTTPS 的要求越来越强烈:Chrome/Firefox未来将 HTTP 标记为不安全,现在我们访问HTTP协议已经出现叹号的提醒了;Apple ATS也会要求App Store 的 app 使用 HTTPS;HTTP/2协议已经在使用,主流浏览器只支持基于 TLS 的 HTTP/2;Google搜索排名给 HTTPS 网站的加权;此外美英政府网站要求 HTTPS。

image

CDN HTTPS架构中首要的就是证书管理,CDN节点的基本架构是通过LVS作为四层的负载均衡,用tengine作为七层的负载均衡,cache 软件是自研的 Swift,依托此架构高效的处理 HTTP 请求。在需要支持 HTTPS时,首先要有证书管理中心,存储用户的证书和私钥,我们做了一个改进,在每个节点会做一个动态证书的加载功能,按需动态加载,。访问流程是,当Client发起一个HTTPS,最终会被某一台tengine处理,当tengine接收到 SSL 握手信息,它会提取出来SNI 信息,也就是要访问的域名信息,根据域名去动态的取到域名对应的证书以及密钥,在这个基础上进行了SSL握手,握手完成后,再进行下面HTTP请求的处理。证书和私钥我们都是动态的加载,只存储在内存中并且混淆存储,全方位保障安全性。

全链路支持 HTTPS

image


我们可以全链路支持 HTTPS,对于一个具有两级节点的CDN架构中,从Client到L1节点,从L1到L2,以及L2回到自己的源站,整个链路中有三段TCP的连接,每一段CDN都支持了HTTPS,第一段需要用户自己的证书,第二段是我们的证书,保证传输数据的加密。第三段需要用户的源站支持 HTTPS,并且 CDN 的回源也用 HTTPS。

无私钥解决方案

image


越来越多的用户更看重自己的证书和私钥的安全性,希望将私钥存储在在用户私有的服务器 ,而不需要提供给 CDN。针对这种情况,CDN推出无私钥解决方案。用户需要自己搭建一个私钥服务器 KeyServer。当有HTTPS握手时,会从握手信息中提取SNI,确定请求访问的域名,将域名配置拿到。对于该域名,如果用户配置了自己的KeyServer,tengine 给KeyServer发送待解密或者签名数据,KeyServer 响应结果, tenine 拿到结果并完成握手。这种方案,通过将 SSL 握手过程中需要用到私钥的部分通过KeyServer进行剥离,实现了将私钥保存在客户的私有服务器上。CDN 也实现了一套 KeyServer 程序。接下来 CDN 会整理出来搭建 KeyServer 集群的完整方案,如果用户想要搭建自己的KeyServer,CDN 可以为用户提供剞劂方案以及源码。

CDN HTTPS 特性

CDN HTTPS 特性如下:
动态证书,快速生效,全网 1 分钟可以生效;
支持 SPDY 和 HTTP/2;
丰富的配置项,可动态设置;
支持用户 KeyServer,实现无私钥服务;
与阿里云证书中心 CAS 联动,可申请免费证书。

HTTPS 优化实践

image


多次握手包含了多次非对称数据加解密以及证书的传输,现实中确实会消耗较多的性能。那么,HTTPS一定会变慢吗?
上图并不能完全代表HTTPS所有的访问都能提升,只是在某些场景下我们做的优化实现了请求的响应速度没有下降,甚至某些场景还有所提升。

优化方法如下:

  • 减少握手:SSL Session ID/Session Ticket,TCP KeepAlive也是需要的;
  • HTTP/2:多路复用和头部压缩可以有效提升数据传输效率;
  • 域名合并:减少 SSL 握手,提升重用;
  • 协议栈优化:调整TCP 初始化窗口,快速重传;
  • 优先算法:ECDSA > RSA。

峰值的应对上,五福开奖的QPS是非常大的,超过了以往处理值,如何应对呢?方法如下:

  1. Cache 系统预热,全部加载到一级节点,避免的访问时回源;
  2. 调度系统也要做工作,包含预判峰值;热点地区统计,临近非热点地区分摊;依据节点能力按比例分配;
  3. 如此大的峰值肯定可能超过我们的预期,我们也要做限流。

如何更好使用 HTTPS?

证书

根据自己的域名情况进行申请,单域名、多域名还是泛域名,申请渠道有阿里云CAS以及其他厂商。

image


阿里云云盾证书服务可以签发Symantec、CFCA、GeoTrust证书。CFCA侧重于国内的金融机构。证书分为DV、OV、EV,DV指域名级别证书,OV、EV是公司企业级别证书。

源站改造,支持 HTTPS

工作中最繁琐的就是源站改造,最基本的包括以下几方面:

  • 页面资源:会有很多HTTP链接,HTTPS中引用这种链接会有告警,尤其再有异步调用时,甚至不会执行了;
  • SSL/TLS:TLS 版本 1.0 以上,支持SNI;
  • 优化配置:开启Session ID/Session Ticket;
  • 证书:支持SHA256,SHA-1 已经不安全;
  • HSTS:可以考虑强制 HTTPS。

image


用户直接输入域名,怎么 HTTPS?

当用户浏览地址栏输入域名访问时,浏览器大部分缺省是通过HTTP访问的,这时我们的用户自己的网站就要做一个配置,做302的跳转,所有的HTTP请求都让它访问HTTPS,这可以实现HTTPS的访问,如果仅仅 302 的话,以后的访问请求每次都需要从HTTP跳转到HTTPS,多了一次 HTTP 请求的处理。对此,还需要有另外的配置,浏览器的访问跟随了跳转后,重新发起一个HTTPS请求,服务器除了正常给到内容外,会多加一个STS的header,header标识告诉浏览器以后这个域名就要强制走HTTPS,并给出一个超大的超时时间。

用户关掉浏览器,下次又要访问网站时,浏览器直接会把HTTP请求在内部转成HTTPS,实现了真正的HTTPS,以后浏览器在这个超时时间内都会通过HTTPS进行访问。

原文链接

目录
打赏
0
0
0
0
73530
分享
相关文章
深入解析MySQL的EXPLAIN:指标详解与索引优化
MySQL 中的 `EXPLAIN` 语句用于分析和优化 SQL 查询,帮助你了解查询优化器的执行计划。本文详细介绍了 `EXPLAIN` 输出的各项指标,如 `id`、`select_type`、`table`、`type`、`key` 等,并提供了如何利用这些指标优化索引结构和 SQL 语句的具体方法。通过实战案例,展示了如何通过创建合适索引和调整查询语句来提升查询性能。
374 9
深入解析云计算中的微服务架构:原理、优势与实践
深入解析云计算中的微服务架构:原理、优势与实践
139 3
|
3月前
|
Java内存模型深度解析:从理论到实践####
【10月更文挑战第21天】 本文深入探讨了Java内存模型(JMM)的核心概念与底层机制,通过剖析其设计原理、内存可见性问题及其解决方案,结合具体代码示例,帮助读者构建对JMM的全面理解。不同于传统的摘要概述,我们将直接以故事化手法引入,让读者在轻松的情境中领略JMM的精髓。 ####
61 6
代理协议解析:如何根据需求选择HTTP、HTTPS或SOCKS5?
本文详细介绍了HTTP、HTTPS和SOCKS5三种代理协议的特点、优缺点以及适用场景。通过对比和分析,可以根据具体需求选择最合适的代理协议。希望本文能帮助您更好地理解和应用代理协议,提高网络应用的安全性和性能。
37 17
深入解析图神经网络:Graph Transformer的算法基础与工程实践
Graph Transformer是一种结合了Transformer自注意力机制与图神经网络(GNNs)特点的神经网络模型,专为处理图结构数据而设计。它通过改进的数据表示方法、自注意力机制、拉普拉斯位置编码、消息传递与聚合机制等核心技术,实现了对图中节点间关系信息的高效处理及长程依赖关系的捕捉,显著提升了图相关任务的性能。本文详细解析了Graph Transformer的技术原理、实现细节及应用场景,并通过图书推荐系统的实例,展示了其在实际问题解决中的强大能力。
291 30
Transformer模型变长序列优化:解析PyTorch上的FlashAttention2与xFormers
本文探讨了Transformer模型中变长输入序列的优化策略,旨在解决深度学习中常见的计算效率问题。文章首先介绍了批处理变长输入的技术挑战,特别是填充方法导致的资源浪费。随后,提出了多种优化技术,包括动态填充、PyTorch NestedTensors、FlashAttention2和XFormers的memory_efficient_attention。这些技术通过减少冗余计算、优化内存管理和改进计算模式,显著提升了模型的性能。实验结果显示,使用FlashAttention2和无填充策略的组合可以将步骤时间减少至323毫秒,相比未优化版本提升了约2.5倍。
90 3
Transformer模型变长序列优化:解析PyTorch上的FlashAttention2与xFormers
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
180 3
【C语言】深入解析C语言结构体:定义、声明与高级应用实践
通过根据需求合理选择结构体定义和声明的放置位置,并灵活结合动态内存分配、内存优化和数据结构设计,可以显著提高代码的可维护性和运行效率。在实际开发中,建议遵循以下原则: - **模块化设计**:尽可能封装实现细节,减少模块间的耦合。 - **内存管理**:明确动态分配与释放的责任,防止资源泄漏。 - **优化顺序**:合理排列结构体成员以减少内存占用。
199 14
深入解析PID控制算法:从理论到实践的完整指南
前言 大家好,今天我们介绍一下经典控制理论中的PID控制算法,并着重讲解该算法的编码实现,为实现后续的倒立摆样例内容做准备。 众所周知,掌握了 PID ,就相当于进入了控制工程的大门,也能为更高阶的控制理论学习打下基础。 在很多的自动化控制领域。都会遇到PID控制算法,这种算法具有很好的控制模式,可以让系统具有很好的鲁棒性。 基本介绍 PID 深入理解 (1)闭环控制系统:讲解 PID 之前,我们先解释什么是闭环控制系统。简单说就是一个有输入有输出的系统,输入能影响输出。一般情况下,人们也称输出为反馈,因此也叫闭环反馈控制系统。比如恒温水池,输入就是加热功率,输出就是水温度;比如冷库,
529 15
深入解析Linux操作系统的内核优化策略
本文旨在探讨Linux操作系统内核的优化策略,包括内核参数调整、内存管理、CPU调度以及文件系统性能提升等方面。通过对这些关键领域的分析,我们可以理解如何有效地提高Linux系统的性能和稳定性,从而为用户提供更加流畅和高效的计算体验。
103 17

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等