又拍云之 HTTPS 访问优化

发布时间: 2017-04-17

前言

HTTPS 协议就是 HTTP+SSL/TLS,即在 HTTP 基础上加入 SSL /TLS 层,提供了内容加密、身份认证和数据完整性三大功能,最终目的就是为了加密数据,用于安全的数据传输。

但通常有得必有失,在增加了安全的基础上,同时也会增加性能和时间的消耗,在上一篇博客中我们阐述了 HTTPS 的访问原理,其中结尾提到了 HTTPS 访问所面临的一些问题,我们再来一块回顾一下:

HTTPS 访问所面临的的问题:

(1)SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐

(2)HTTPS 降低用户访问速度(多次握手)

(3)网站改用 HTTPS 以后,由 HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用 301、302 跳转)

(4)HTTPS  涉及到的安全算法会消耗 CPU 资源,需要增加大量机器(https 访问过程需要加解密)

…………

交互过程

面对上述各式各样的问题,那我们应该如何解决呢?首先咱们先看一下用户采用 HTTP 访问跳转到 HTTPS,整个交互过程如下:

上述整个访问过程,通过 wireshark 抓包,结果如下

咱们来一一分解

第一步:用户在浏览器里输入 http://www.domain.com/1213.gif 点击回车以后,浏览器与服务器发生三次握手,即图中 1

第二步:服务器收到用户的请求,响应 301 状态码,让用户跳转到 HTTPS ,重新请求 https://www.domain.com/1213.gif,图中 2,抓包结果如下:

第三步,用户重新发起 HTTPS 请求,再次与服务器进行三次 TCP 握手,图中 3

第四步,TCP 握手成功后,浏览器开始与服务器进行 TLS 握手,图中 4、8

性能优化

1、从上述流程可以看出相比 HTTP 请求,HTTPS 多了一次 301 跳转,那我们能否将这次跳转省去呢?

又拍云采用了 HSTS(HTTP Strict Transport Security)技术,开启此功能后,将保证浏览器始终连接到网站的 HTTPS 加密版本,不需要用户手动在URL地址栏中输入 HTTPS 的地址。

也就是当开启 HSTS 功能,用户在浏览器里输入 HTTP 协议进行访问时,浏览器会自动将 HTTP 转换为 HTTPS 进行访问,不再有上述 301 跳转的出现,浏览器访问过程如下图所示:

优点:

(1)节省 HTTPS 通信 RTT(Round-Trip Time,往返时间)

(2)强制使用 HTTPS

(3)能阻止基于 SSL Strip 的中间人攻击,万一证书有错误,则显示错误,用户不能回避警告,从而能够更加有效安全的保障用户的访问

又拍云已支持此功能,需手动开启,使用方法可咨询又拍云工程师

2、省去了上述 301 跳转的时间,那我们是否可以把 TLS 握手过程也优化下呢?

又拍云采用了 False Start (抢先开始)技术,浏览器在与服务器完成 TLS 握手前,就开始发送请求数据,服务器在收到这些数据后,完成 TLS 握手的同时,开始发送响应数据。

因此数据是在完成握手之前发送的,所以称为 False Start ,访问抓包如下:

所以开启此功能后,数据传输时间进一步缩短,使用此功能有两个条件必须满足:

(1)服务器支持 NPN(Next Protocol Negotiation)或 ALPN(Application Layer Protocol Negotiation),又拍云已完美支持

(2)支持 PFS ,因 False Start 发送请求数据是在完成握手之前,所以采用 PFS 可以提高安全性,又拍云已支持 PFS

又拍云已默认支持 False Start,无需特殊配置

3、在 2 中提到了 PFS,那什么是 PFS,有何用途?

我们在上一篇博客中提到了非对称加密算法 RSA,包含了公钥、私钥,其中私钥是保密不对外公开的,由于此算法既可以用于加密也可以用于签名,所以用途甚广,但是还是会遇到一些问题:

(1)假如我是一名黑客,虽然现在我不知道私钥,但是我可以先把客户端与服务器之前的传输数据(已加密)全部保存下来

(2)如果某一天,服务器维护人员不小心把私钥泄露了,或者服务器被我攻破获取到了私钥

(3)那我就可以利用这个私钥,破解掉之前已被我保存的数据,从中获取有用的信息

所以为了防止上述现象发生,我们必须保护好自己的私钥。

但如果私钥确实被泄漏了,那我们改如何补救呢?那就需要用到 2 中提到的:PFS(perfect forward secrecy)完全前向保密功能,此功能用于客户端与服务器交换对称密钥,起到前向保密的作用,也即就算私钥被泄漏,黑客也无法破解先前已加密的数据。

实现此功能需要服务器支持以下算法和签名组合:

(1)ECDHE 密钥交换、RSA 签名;

(2)ECDHE 密钥交换、ECDSA 签名;

又拍云已默认支持上述组合,无需特殊配置,抓包如下图所示:

4、上文中提到了私钥泄露的问题,我们可以采用 PFS 进行数据保护,但是就算我们采用了 PFS 功能,但是也只能保证私钥泄露前的数据不被破解,一旦私钥被黑客获取,那就说明从此以后数据传输将能被完全破解。所以只要私钥遭到泄漏,那我们就需要通知用户,服务器私钥不再安全了,浏览器不能再信任这个私钥了。

那如何通知用户呢,就需要用到证书吊销功能了。

在此篇文章的第一张图中,介绍 HTTPS 的交互过程,其中第 ⑤⑥⑦ 步由客户端发起,向 CA 机构发起请求,这个请求就是用来确认证书是否已被吊销,如果被吊销,则说明私钥已不再安全。

浏览器查询证书吊销信息通常有两种方式:

(1) CRL(Certificate Revocation List,证书撤销名单):CA 机构会维护并定期更新 CRL 列表。但这个机制存在不足:CRL 列表只会越来越大,如果浏览器更新不及时,会造成误判。

(2)OCSP(Online Certificate Status Protocol,在线证书状态协议):是对 CRL 机制的弥补,浏览器可以通过 OCSP 实时的向 CA 机构验证证书。但 OCSP 同样存在不足:对 CA 机构要求过高,要求实时全球高可用,增加浏览器的握手时延等。

所以如果 ⑤⑥⑦ 步出现堵塞或延时,那将对用户的访问造成极大的影响。

又拍云采用了 OCSP Stapling 技术,其弥补了 OCSP 协议的缺陷,此技术是由又拍云服务器模拟浏览器向 CA 发起请求,并将带有 CA 机构签名的 OCSP 响应保存到本地,然后在与客户端握手阶段,将 OCSP 响应下发给浏览器,省去浏览器的在线验证过程。由于浏览器不需要直接向 CA 站点查询证书状态,这个功能对访问速度的提升非常明显。

又拍云已默认开启此功能,无需特殊配置,抓包如下图所示:

5、咱们重新回到 TLS 握手,我们是否可以再简化这些握手过程呢?

如果用户的一个业务请求包含了多条的加密流,客户端与服务器将会反复握手,必定会导致更多的时间损耗。或者某些特殊情况导致了对话突然中断,双方就需要重新握手,增加了用户访问时间。

因此又拍云提供了 Session Identifier(会话标识符)复用功能

(1)服务器为每一次的会话都生成并记录一个 ID 号,然后发送给客户端

(2)如果客户端发起重新连接,则只要向服务器发送该 ID 号

(3)服务器收到客户端发来的 ID 号,然后查找自己的会话记录,匹配 ID 之后,双方就可以重新使用之前的对称加密秘钥进行数据加密传输,而不必重新生成,减少交互时间。

因此又可以进一步降低客户端的访问时间,提升用户的访问体验。又拍云已默认开启此功能,无需特殊配置,抓包如下图所示:

6、从上述可见 HTTPS 的访问过程已被又拍云全方位的优化,提升了用户访问速度,让访问更加舒畅。那么我们接下来再聊一个与 HTTPS 特性相关的优化。

网站如果想实现 HTTPS 访问,首要条件必须为域名购买一款 SSL 证书,由于历史原因,在 HTTPS 发展之初,那时候网站还很少,通常一台服务器 ip 就只会绑定一张 SSL 证书,所以客户端浏览器在访问服务器时也就是发送 client hello 时,没有携带任何域名信息,因为浏览器认为一个服务器 ip 就只会绑定一张 SSL 证书,所以服务器也就发送绑定的 SSL 证书。

但是随着互联网的发展,越来越多的虚拟机出现,一台服务器ip会绑定多个SSL证书,所以当浏览器发送client hello时,服务器就不知道该返回哪张SSL证书了。因此用户使用 CDN 加速时,传统CDN厂商需要针对每一个域名单独提供一套服务 ip,考虑到成本,传统CDN企业通常限制加速节点数量,并且不能随意扩展或调整节点资源。

那么这个问题该如何解决呢??

又拍云采用了先进的 SNI (Server Name Indication,服务器名称指示)技术,在服务器 ip 绑定多个证书时,也能保证客户端正常访问,从而实现了 HTTPS 加速客户可以共享所有 CDN 节点  ip 资源,大大提高了覆盖用户的节点数量和服务质量,同时也增加了资源调配的灵活性,能更好的服务于 HTTPS 加速业务。

又拍云已默认支持此功能,无需特殊配置,抓包如下图所示:

7、又拍云也是一家与时俱进的公司,所以如果互联网上出现了新的、好用的功能或协议,又拍云都会第一时间上线支持,为客户着想,满足客户不同的需求。

所以又拍云为了进一步优化HTTPS协议,再次提升用户的访问速度,很早之前就已上线并支持了 HTTP/2 协议,

 HTTP/2 即超文本传输协议 2.0,是下一代 HTTP 协议。它是由国际互联网工程任务组 (IETF)以 SPDY 为原型开发的,HTTP/2 优势如下:

(1)HTTP/2 采用二进制格式传输数据,其在协议的解析和优化扩展上带来更多的优势和可能。

(2)HTTP/2 对消息头采用 HPACK 进行压缩传输,能够节省消息头占用的网络的流量。

(3)多路复用,简单说就是所有的请求可以通过一个 TCP 连接并发完成。

(4)Server Push:服务端能够更快的把资源推送给客户端。

(5)禁用了一些不安全的加密套件.

        ………………

又因 HTTP/2 是在 HTTPS 协议的基础上实现的,所以只要使用又拍云 HTTPS 加速服务的域名,都可免费享受 HTTP/2 服务,无需做任何特殊配置,抓包结果如下:

总结

综上所述,可以看到,又拍云在优化 HTTPS 访问时,付出了艰辛的努力,实现了各种优化功能,让用户使用的更加安心、舒心,也让用户觉得使用又拍云,心里只有一个字“爽”。

所以我们再来看下之前用户遇到的问题:

(1)SSL 证书费用很高,以及其在服务器上的部署、更新维护非常繁琐

  答:又拍云已推出申请免费证书,并且是唯一一家推出了两款免费证书,不限量申请,走过路过不要错过哦(申请

 如果你嫌部署 SSL 证书比较麻烦,不想改动源站服务器,又想实现全站 HTTPS,那就使用又拍云的 CDN 服务,只要将域名配置到 CDN 平台,然后上传 SSL 证书(步骤非常简单) 就可实现 HTTP  到 HTTPS 的转换了

(2)HTTPS 降低用户访问速度(多次握手)

答:上述文章中都有涉及到优化

(3)网站改用 HTTPS 以后,由 HTTP 跳转到 HTTPS 的方式增加了用户访问耗时(多数网站采用 301、302 跳转)

答:上述文章中 1 已解决

(4)HTTPS 涉及到的安全算法会消耗 CPU 资源,需要增加大量机器(HTTPS 访问过程需要加解密)

 答:又拍云的服务器,都是高质量、高性能的服务器,服务于上万的客户,所以这点损耗,完全可以忽略不计。

上述文章 3 中有提到非对称加密算法,如果你还想提升 HTTPS 的访问速度,减少加解密的损耗,那可以来又拍申购一款 ECC 证书(即 Symantec 专业版证书,这款证书采用了 ECC 算法,安全性和加解密速度都是最牛逼的,不过就是有点小贵,土豪请无视)

咋样,说了这么多,有木有心动的感觉,那还不赶快来使用又拍云服务,让网站体验飞一般的感觉,哈哈!(官网

请在下方留下您的评论.加入TG吹水群