CDN-HTTPS/HTTP2/HSTS

1.HTTPS

HTTPS是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即将HTTP用SSL/TLS协议进行封装,HTTPS的安全基础是SSL/TLS。

HTTPS,是HTTP over SSL的意思,提到HTTPS就不得不先简单描述一下SSL/TLS协议。SSL协议是Netscape在1995年首次提出的用于解决传输层安全问题的网络协议,其核心是基于公钥密码学理论实现了对服务器身份认证、数据的私密性保护以及对数据完整性的校验等功能。1999年IETF将SSL 3.0标准化,是为TLS 1.0版本,目前TLS协议的最新版本是1.2版本,TLS 1.3标准正在制定中。为了方便,下文将SSL/TLS协议都简称为SSL协议。

SSL协议在HTTP请求开始之前增加了握手的阶段,其粗略流程如下图所示:

https_1

  • 在SSL握手阶段,客户端浏览器会认证服务器的身份,这是通过“证书”来实现的,证书由证书权威(CA)为某个域名签发,可以理解为网站的身份证件,客户端需要对这个证件进行认证,需要确定该证书是否属于目标网站并确认证书本身是否有效。最后在握手阶段,通信的双方还会协商出一个用于加密和解密的会话密钥。
  • SSL握手阶段结束之后,服务器和客户端使用协商出的会话密钥对交互的数据进行加密/解密操作,对于HTTP协议来说,就是将HTTP请求和应答经过加密之后再发送到网络上。

由此可见,因为SSL协议提供了对服务器的身份认证,所以DNS劫持导致连接错误服务器的情况将会被发现进而终止连接,最终导致DNS挟持攻击无法实现。此外SSL协议还提供数据的加密和完整性校验,这就解决了关键信息被嗅探以及数据内容被修改的可能。

以下是HTTPS加密传输流程:


  1. 客户端发起HTTPS请求。
  2. 服务端生成公钥和私钥(可以自己制作,也可以向专业组织申请)。
  3. 服务端把相应的公钥证书传送给客户端。
  4. 客户端解析证书的正确性。
    • 如果证书正确,则会生成一个随机数(密钥),并用公钥该随机数进行加密,传输给服务端。
    • 如果证书不正确,则SSL握手失败。

    说明 正确性包括:证书未过期、发行服务器证书的 CA可靠、发行者证书的公钥能够正确解开服务器证书的发行者的数字签名、服务器证书上的域名和服务器的实际域名相匹配。

  5. 服务端用之前的私钥进行解密,得到随机数(密钥)。
  6. 服务端用密钥对传输的数据进行加密。
  7. 客户端用密钥对服务端的加密数据进行解密,拿到相应的数据。

2.HTTP/2

HTTP/2也被称为HTTP 2.0,是最新的HTTP协议。目前,Chrome、 IE11、Safari以及Firefox 等主流浏览器已经支持 HTTP/2协议。HTTP/2优化了性能,兼容了HTTP/1.1的语义,与SPDY相似,与HTTP/1.1有巨大区别。

说明 SPDY是Google开发的基于TCP的应用层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩,与HTTP/2相似。

HTTP/2的优势

  • 二进制协议:相比于HTTP 1.x 基于文本的解析,HTTP/2将所有的传输信息分割为更小的消息和帧,并对它们采用二进制格式编码。基于二进制可以让协议有更多的扩展性,比如引入了帧来传输数据和指令。
  • 内容安全:HTTP/2基于HTTPS,因此天然具有安全特性。通过HTTP/2的特性可以避免单纯使用HTTPS的性能下降。
  • 多路复用(MultiPlexing):通过该功能,在一条连接上,您的浏览器可以同时发起无数个请求,并且响应可以同时返回。另外,多路复用中支持了流的优先级(Stream dependencies)设置,允许客户端告诉服务器哪些内容是更优先级的资源,可以优先传输。
  • Header压缩(Header compression):HTTP请求头带有大量信息,而且每次都要重复发送。HTTP/2 采用HPACK格式进行压缩传输,通讯双方各自缓存一份头域索引表,相同的消息头只发送索引号,从而提高效率和速度。
  • 服务端推送(Server push):同SPDY一样,HTTP/2 也具有客户端推送功能。目前,有大多数网站已经启用HTTP/2,如淘宝。使用Chrome浏览器登陆控制台,您可以查看是否启用 HTTP/2 。

3. HSTS

HSTS (HTTP Strict Transport Security),RFC6797,其作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。

使用场景

当您网站全站使用 HTTPS后,必须要将所有 HTTP 请求 301/302 重定向到 HTTPS。如果您从浏览器输入 HTTP 链接,或在他处点击了 HTTP 链接,则服务器则将该 HTTP 请求 301/302 重定向到 HTTPS。但是这个过程可能被劫持,导致重定向后的请求没有到期服务器,这个问题可以通过 HSTS 来解决。

HSTS 是一个响应头: Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload] ,各参数说明如下:

  • max-age:单位是秒。
  • Strict-Transport-Security: 在浏览器缓存的时间,浏览器处理域名的 HTTP 访问时,若该域名的 Strict-Transport-Security 没有过期,则在浏览器内部做一次 307 重定向到 HTTPS,从而避免浏览器和服务器之间 301/302 重定向被劫持的风险。
  • includeSubDomains,可选参数,如果指定这个参数,表明这个域名所有子域名也适用上面的规则。
  • preload,可选参数,支持 preload 列表。

说明

  • HSTS 生效前仍然需要第一次 301/302 重定向到 HTTPS;
  • HSTS 响应头在 HTTPS 访问的响应中有效,在 HTTP 访问的响应中无效;
  • 仅对 443 端口有效,对其他端口无效;
  • 仅对域名有效,对 IP 无效;
  • 启用 HSTS 之后,一旦网站证书错误,在缓存时间。

 4. TLS

TLS(Transport Layer Security)即安全传输层协议,在两个通信应用程序之间提供保密性和数据完整性。最典型的应用就是 HTTPS。HTTPS,即 HTTP over TLS,就是安全的 HTTP,运行在 HTTP 层之下,TCP 层之上,为 HTTP 层提供数据加解密服务。

目前,TLS 主要有4个版本:

  • TLSv1.0:RFC2246,1999年发布,基于 SSLv3.0,该版本易受各种攻击(如BEAST和POODLE),除此之外,支持较弱加密,对当今网络连接的安全已失去应有的保护效力。不符合 PCI DSS 合规判定标准。支持的主流浏览器: IE6+,Chrome 1+,Firefox 2+。
  • TLSv1.1:RFC4346,2006年发布,修复 TLSv1.0 若干漏洞。支持的主流浏览器:IE11+,Chrome22+,Firefox24+,Safri7+。
  • TLSv1.2:RFC5246,2008年发布,目前广泛使用的版本。支持的主流浏览器:IE11+,Chrome30+,Firefox27+,Safri7+。
  • TLSv1.3:RFC8446,2018年发布,最新的 TLS 版本,支持0-RTT模式(更快),只支持完全前向安全性密钥交换算法(更安全)。支持的主流浏览器:Chrome 70+,Firefox 63+。

说明 目前TLSv1.0、TLSv1.1和TLSv1.2版本默认开启。

猜你喜欢

转载自blog.csdn.net/Kim_Weir/article/details/85334805