本文内容根据演讲视频以及PPT整理而成。
本次的分享主要围绕以下三点:
- 什么是HTTPS?
- 为什么要使用HTTPS?
- 以及如何使用HTTPS和阿里云CDN是如何为企业网站提供HTTPS服务的
一、什么是HTTPS?
HTTPS中的“S”指的是Security,也就是安全。所以简单而言,HTTPS就是安全的HTTP,大家都知道HTTP是一个明文的超文本传输协议,其优势就是简单、快速和灵活,并且是无状态的。其缺点就是不够安全,HTTP直接运行在TCP层之上,因此其在网路之上传输的数据就是明文的,这样一来一些恶意的网络运营商就可以抓包进而获取其中传输的内容。
二、为什么需要HTTPS?
那么,究竟为什么需要HTTPS呢?这是因为互联网发展的速度变得越来越快,网络也变得越来越发达和复杂。而在利益的驱动下,一些恶意的运营商会对于用户的HTTP请求进行劫持或者篡改,在其中插入一些广告等以实现其业务推广。如果现在大家还是在使用HTTP为客户做服务可能还会经常遇到这样的问题,二目前也只有HTTPS才能从根本上解决这种劫持、篡改一些泄露等问题。
HTTPS时代的最大的推动者就是Google。在今年的年初,Google就在其安全博客上表明在2018年7月份会将所有的HTTP网站标记为不安全,而Firefox也会采用类似的做法。而现在已经是5月份的下旬了,距离7月份也就不到2个月的时间了,可以说HTTP时代马上就要到来了。到那时候,可能当大家去访问HTTP网站的时候在地址栏上就会显示出一个大的红色惊叹号表明该网站不安全,这样当访问HTTP网站的时候大家的心理就会变得不安,因为无法知道服务所提供的网页是否已经被中间的网络运营商篡改了。而登录注册等环节所提交的密码等信息可能就会被泄露了。
Google的这个表明也促使很多用户开始切入HTTPS,如下图所示的是Chrome浏览器加载HTTPS网站在各个国家的发展变化趋势。
图中最上面的是美国的趋势线,可以看出在2015年时候还不到50%,在2016年大概在50%~60%之间,在2017年已经上涨到了70%左右,现在已经达到了80%。而图中最下面的那条是日本的趋势线,这个相比而言就会少很多了,在2015年和2016年的时候趋势表现比较平稳,大概在25%左右,而在2017年的时候就翻了一倍到了50%,而目前已经超过了60%。这张图中没有中国的统计信息,可能的原因大致有两个,一方面在国内无法访问Google,另外一方面可能是国内的占比太小。估计目前国内的占比大致在40%左右,落后于美国三年,所以发展的空间也是非常大的,趋势也是比较明显的,未来会有更多的网站开始使用HTTPS。
- 搜索:谷歌、百度、Bing
- 电商:天猫、淘宝、京东
- 支付:支付宝、微信支付、所有手机银行&网银
- 社交:微信、微博
- 娱乐:今日头条、抖音、快手
- 直播:虎牙、斗鱼、熊猫
三、如何使用HTTPS?
而一些用户没有使用HTTPS的原因,大概会有这样几个担忧:
- 证书。一些用户不了解证书是什么东西,以及如何申请和到哪里申请,也不了解申请下来的证书应如何配置,私钥又应该如何管理。而且在证书到期之前还需要重新申请和配置,因此非常复杂。
- 性能。担心是用了HTTPS之后使得其性能受到影响,比如服务器的HTTPS压力扛不住了,因为客户端需要做握手,因此会影响性能和体验。
- 体验。担心使用HTTPS之后使得用户体验下降,因为使用HTTPS之后需要进行SSL握手,而SSL握手就需要时间,这样就会影响用户的首包时间,进而影响用户体验。
- 难度。因为HTTPS里面要用到SSL握手,其不像TCP层那么简单只需要三次握手就可以了,其流程非常复杂,并且会涉及到一些密码学相关的内容,因此会比较复杂,也比较有难度,并且其都是加密的内容,出了问题也不好进行排查,不像HTTP通过抓包就可以实现。总而言之,就是使用HTTPS并没有那么简单,是具有一定难度的。
以上的种种原因导致用户对于HTTPS还是有一点恐惧的。那么,阿里云CDN-HTTPS是如何帮助用户解决以上这些顾虑的呢?
首先,看一下阿里云CDN HTTPS的业务流程,不管用户使用HTTP还是HTTPS去访问CDN都需要进行DNS解析,在访问到CDN的边缘节点之后,如果这些资源是静态资源就直接在CDN的边缘节点进行响应并返回了,如果访问的资源没有被缓存或者属于动态资源就需要回到源站服务器去进行获取并缓存到CDN。在用户这一侧,提供了HTTP和HTTPS两种方式进行访问。在开启了HTTPS之后也能够使用HTTP进行访问,如果想要实现全站HTTPS,那么CDN也提供像301跳转或者HSTS这种方式做重定向。用户侧也是最重要的,比如像劫持、篡改以及泄露等问题都经常发生在这一侧。比如一些视频网站为了收费常常在链接后面加上一些其他信息,如果这一侧使用HTTP进行服务,中间的网络运营商都可以进行劫持,看到相关的参数从而实现盗链,这样就会对于视频网站造成比较大的影响。在阿里云CDN内部默认走HTTPS做传输,对于特殊的需求,也会做协议跟随等方式进行传输,这是因为在阿里巴巴内部也经常会遇到劫持的问题,所以之后就是用HTTPS。在源站这一侧,用户可以根据自己的服务器支持情况进行配置,也可以支持HTTP回源、HTTPS回源或者协议跟随回源。这样的整个流程还是比较清晰和简单的。
阿里云HTTPS的产品特性主要体现在以下四个方面:即一键开启、功能丰富、秒级生效、稳定可靠。产品所对应的功能如下图所示。
前面所提到的配置的秒级生效都是由如下图所示的架构实现的,所有的HTTPS配置都可以通过管控系统实现。上面所说的那些丰富功能能够提供给用户进行配置的并不多,这是因为提供的功能越多,用户可能就会越恐惧,不知道如何配置。所以,阿里云HTTPS只将最简单的功能如证书配置、HTTP2的开关以及HTTPS的强制跳转等开放到用户的控制台。用户在控制台也可以选择云盾证书、自定义上传或者免费证书等,并且一键开启HTTPS。这些证书以及HTTPS的配置会同步到配置管理系统,而并不是同步到所有的自定义边缘节点服务器。当有HTTPS请求到达边缘节点服务器时,再动态地去配置管理系统中获取,并缓存到边缘节点服务器。之后切换证书并完成日加载,最终实现这一侧的SSL握手。不会同步到所有边缘节点机器的原因有几条,一是同步的机器越多,加载的速度就会越慢。其次是当同步到没有访问到的机器时只会白白地浪费内存,而且完全没有任何必要。
如下图所示的在CDN控制台上的HTTPS的配置,可以看到这里的配置是非常简单的,只有证书、HTTP2开关以及强制跳转等几项,点击修改配置之后可以发现有几种类型的证书可以选择,即云盾证书、自定义证书和免费证书。如果想要使用免费证书则需要勾选同意授权阿里云申请免费证书,这样就可以使用HTTPS了。而因为阿里云不是CA机构,所以并不能签发证书,所以需要用户进行授权。阿里云CDN只是帮助用户去做本来应该由用户自己去做的比较繁琐的事情,所以就需要确保域名需要cname到阿里云CDN,否则CDN是无法与CA实现配合校验的,当校验失败了CA也不会签发证书。
另外一个优化就是阿里云CDN HTTPS即将发布TLSv1.3。TLSv1.3最初的提起是在2014年的时候,到目前为止已经经历了4年的时间,共计产生了28个版本的提案进行优化、讨论和修改,在今年3月份的时候被纳入了标准化。目前只有Chrome和Firefox两个浏览器支持TLSv1.3,但是在未来会有更多的浏览器支持。相对于TLSv1.2,TLSv1.3的主要特点就是更快和更安全。了解TLSv1.2的同学可能清楚,在TLSv1.2中握手需要两个RDT才能完成,而在TLSv1.3中握手只需要1个甚至0个RDT,所以比TLSv1.2更快。更加安全则体现在TLSv1.3只支持安全性更高的PFS秘钥交换算法,而不支持像RSA这样的不安全的秘钥交换算法。这是因为如果使用了RSA这种秘钥交换算法,之前保留的那些流量是可以通过私钥解密的。比如某个网络运行商将通过自己的流量都保存下来了,那么如果某一天其通过某种手段获取到私钥之后就可以完全解密所保存的流量,这样里面的账号、密码都被泄露了。此外,TLSv1.3从Server Hello之后就被完全加密了,连里面传输的证书外界都看不到,所以比TLSv1.2更加安全。
如下图所示的是HTTP/1.1和HTTP/2的网络加载拓扑图。可以看到HTTP/2的网络利用率更高,而HTTP/1.1中很多的请求都是在白白地等待。也可以看到HTTP/1.1里面需要用到6个SSL链接,而HTTP/2里面只需要用到1个,节省到昂贵的SSL请求,这样对于客户端和服务端都比较有益。
- 加载性能可以达到500%
- 头部压缩可以达到95%
- 服务器的KBS性能提升60%
开启节点SSL Session性能优化的手段之一。SSL Session复用主要有两种方式,一种方式是Session ID,另外一种方式就是Session ticket。Session ID是不支持分布式这种场景的,分布式场景中将使用Session ticket进行优化,而Session ticket客户端支持率并不高,仅在40%到50%,所以主要还是以Session ID为主,当做了定制开发之后,Session ID的比例一下子提升了20%多,握手时间也从0多毫秒降低到不到70毫秒,效果也非常明显,这样就能够提升服务器的性能,减少首包时间。
最后和大家分享两个客户案例,其中一个是虎牙直播。直播平台所面临的最大的问题就是直播流黑屏和花屏。在前期,虎牙只用了HTTP没有使用HTTPS,所以经常会遇到在直播里面出现切屏以及花屏,因此被客户投诉。这是因为如果使用HTTP,那么网络运营商是可以直接修改视频帧的,可以直接进行替换,这样就会影响客户的体验。虎牙在使用了HTTPS之后就可以完全解决上述问题,性能上也没有太大的影响,效果也非常不错。
第二个案例就是天猫和淘宝,他们是阿里云CDN的最大的内部客户。天猫和淘宝上传的图片以及CSS和JS等静态文件都是保存在阿里云CDN上的。早期,天猫和淘宝只是在比较关键的登录注册环节使用HTTPS,但是也经常出现像首页的大图被网络运营商替换并插入广告的情况,而这对于消费者而言是不知情的,可能出现被钓鱼的情况。于是在2014年经历了一年多的时间,在2015年天猫和淘宝实现了全站的HTTPS。