开启了 SSL 后还有 HSTS 和 HTTP/2 呢!

2017-04-0719:11:28 28 8,328
摘要

其实说起来很简单,HSTS是用来保证https的稳定持续性的对已经有http外链情况下的网站还是有帮助的可以快速自动的让用户端自动的转换到https链接,减少外链方面的损失,HTTP/2其实意识提升了速度性能二是曾加了安全性,应该说使用SSL后HSTS和HTTP/2还是很有必要性的,并且现在国内还没有完全的普及开来,特别是HTTP/2几乎国内主流互联网站使用的还少之又少(比如:明月发现mail.qq.com和支付宝是http2外就没有再发现还有支持HTTP/2的了),所以现在就用上HTTP/2绝对是个“装逼”神器,Chrome浏览器有一个插件(HTTP/2 and SPDY indicator)可以判断所访问的网站是否支持HTTP/2,大家可以安装后看看有多少网站支持HTTP/2来了解一下。

熟悉明月的站长们应该都知道明月最近喜欢上了 LNMP 和 Typecho ,为此还专门新上线了一个 Typecho 博客【明月登楼学习笔记 Blog』用来记录和分享学习 LNMP 生产环境的过程经历。在上周终于在这个 Typecho 博客上启用了“心仪已久”的 SSL(证书是 Let’s Encrypt 在线申请的),只有在启用了 SSL 后才发现还有更多的新技术可以尝试,比如:HSTS 和 HTTP/2。今天明月就着重的给大家分享一下相关的知识以及在 Nginx 下开启支持的方法。

开启了 SSL 后还有 HSTS 和 HTTP/2 呢!

HSTS

先说说 HSTS 吧,其实这个跟 SSL 相关的,下面是百度百科对 HSTS 词条的解释:

HSTS(HTTP Strict Transport Security)国际互联网工程组织 IETE 正在推行一种新的 Web 安全协议

HSTS 的作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。

最后这句“HSTS 的作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。”就是 HSTS 的主要实现的意义,对,就是强制所有客户端(主要就是指浏览器)使用 HTTPS 与服务器的连接,并且最重要的是这个 HSTS 一旦启用,那么所有客户端浏览器(比如:Chrome)就会只能连接 https 了,如果不使用 https 的话,那么对你的用户来说可能就无法访问你的网站了。

作用

HSTS 可以用来抵御 SSL 剥离攻击。SSL 剥离攻击是中间人攻击的一种,由 Moxie Marlinspike 于 2009 年发明。他在当年的黑帽大会上发表的题为“New Tricks For Defeating SSL In Practice”的演讲中将这种攻击方式公开。SSL 剥离的实施方法是阻止浏览器与服务器创建 HTTPS 连接。它的前提是用户很少直接在地址栏输入 https://,用户总是通过点击链接或 3xx 重定向,从 HTTP 页面进入 HTTPS 页面。所以攻击者可以在用户访问 HTTP 页面时替换所有 https://开头的链接为 http://,达到阻止 HTTPS 的目的。

HSTS 可以很大程度上解决 SSL 剥离攻击,因为只要浏览器曾经与服务器创建过一次安全连接,之后浏览器会强制使用 HTTPS,即使链接被换成了 HTTP。

另外,如果中间人使用自己的自签名证书来进行攻击,浏览器会给出警告,但是许多用户会忽略警告。HSTS 解决了这一问题,一旦服务器发送了 HSTS 字段,用户将不再允许忽略警告。

不足

用户首次访问某网站是不受 HSTS 保护的。这是因为首次访问时,浏览器还未收到 HSTS,所以仍有可能通过明文 HTTP 来访问。解决这个不足目前有两种方案,一是浏览器预置 HSTS 域名列表,Google Chrome、Firefox、Internet Explorer 和 Spartan 实现了这一方案。二是将 HSTS 信息加入到域名系统记录中。但这需要保证 DNS 的安全性,也就是需要部署域名系统安全扩展。截至 2014 年这一方案没有大规模部署。

由于 HSTS 会在一定时间后失效(有效期由 max-age 指定),所以浏览器是否强制 HSTS 策略取决于当前系统时间。部分操作系统经常通过网络时间协议更新系统时间,如 Ubuntu 每次连接网络时,OS X Lion 每隔 9 分钟会自动连接时间服务器。攻击者可以通过伪造 NTP 信息,设置错误时间来绕过 HSTS。解决方法是认证 NTP 信息,或者禁止 NTP 大幅度增减时间。比如 Windows 8 每 7 天更新一次时间,并且要求每次 NTP 设置的时间与当前时间不得超过 15 小时。

Nginx 下开启 HSTS

不过在 Let’s Encrypt 免费证书方便又快捷的部署技术越来越成熟的今天,感觉永久使用 HTTPS 好像也不是不可能了,为了提升 https 的兼容性明月还是建议大家开启 HTST 支持的。在 Nginx 下开启 HSTS 非常的简单,仅仅需要在 Nginx 你域名主机配置文件里加入下面这句就可以了:

  1. add_header Strict-Transport-Security "max-age=6307200; includeSubdomains; preload";
  2. #开启 HSTS,并设置有效期为“6307200 秒”(6 个月),包括子域名(根据情况可删掉),预加载到浏览器缓存(根据情况可删掉)

开启了 SSL 后还有 HSTS 和 HTTP/2 呢!

HTTP2(HTTP/2)

HTTP 2.0 即超文本传输协议 2.0,是下一代 HTTP 协议。是由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis (httpbis)工作小组进行开发。是自 1999 年 http1.1 发布后的首个更新。HTTP 2.0 在 2013 年 8 月进行首次合作共事性测试。在开放互联网上 HTTP 2.0 将只用于 https://网址,而 http://网址将继续使用 HTTP/1,目的是在开放互联网上增加使用加密技术,以提供强有力的保护去遏制主动攻击。DANE RFC6698 允许域名管理员不通过第三方 CA 自行发行证书。

存在的问题

对于 HTTP 2.0 草案,HTTP 2.0 在往返时延(RTT)上仍是一个问题,尤其是在移动网络方面。所以谷歌正在测试另一项协议,即 QUIC。QUIC 在 TCP 到 UDP 的网络转换上更加流畅。

导致 RTT 的因素有:信号传播延迟(光在光纤和铜介质导线中传播速度是不同的)、网络服务器端以及用户端路由器跨越的数量、路由器是否拥堵以及路由器自身容量等。这些都不是 Web 用户或服务器端可以控制的。

与此同时,客户端和服务器端处理网页的方式也会导致 RTT,任何需要数据包传送的信号,即便数据包丢失或出错,都会增加客户端往返时延。所以这需要进行误差校正以及“数据包校验”,QUIC 建议使用 UDP 传输代替 TCP 以避免 TCP 头线屏蔽。

专家评议

很多专家指出,大规模的互联网监听之所以能得逞,部分原因在于监听很容易进行。该研究的参与者、都柏林圣三一学院的计算机科学家斯蒂芬·法雷尔表示,IETF 计划加强电子邮件和即时消息传输的安全性,这两者是网络监听的主要目标。存在着对这些信息进行加密的协议,但步骤繁琐,加密所需要的协议也常被错误地设置,而且其在不同的电子邮件服务商之间不起作用。法雷尔指出:“我们能做得更好,使设置更简单而且可核实。”

法雷尔表示,要做到这一点还面临一些困难,互联网网页的静止部分被隐藏或存储在距用户更近的本地服务器上,隐藏的内容一般处于“未加密”状态,这使它能被找出;而加密则会使每页内容变得独一无二。
法雷尔指出:“如果你加密,你就使得其更难收藏。而且,我们如何在获得安全性时兼顾收藏的好处呢?这是我们正在研究的问题。”

谷歌技术推广部的提姆·布雷曾在几个关键网络协议的开发中立下汗马功劳,他表示:“这是政策问题而非技术问题。”

IETF 主席亚里·阿尔科也表示,任何人都不应怀抱有幻想,期待这种技术很快能实现。

Nginx 下开启主机对 HTTP/2 的支持

跟开启 HSTST 一个样,也是在 Nginx 你域名主机配置文件里声明 SSL 端口为 443 的后面加上 http2 即可,如下:

  1. listen 443 ssl http2;
  2. #使用 HTTP/2,需要 Nginx1.9.7 以上版本

最新版的 LNMP 包就支持 http2 的,但是因为需要用到系统 OpenSSL 1.0.2 的支持,所以这里大家一定要先确认你当前 VPS 系统的 OpenSSL 版本是否是 1.0.2 以及以上,具体大家可以参考【Nginx 在启用 SSL 后开启 HTTP/2 支持』一文里的方法来确认以及编译升级 OpenSSL。

其实说起来很简单,HSTS 是用来保证 https 的稳定持续性的对已经有 http 外链情况下的网站还是有帮助的可以快速自动的让用户端自动的转换到 https 链接,减少外链方面的损失,HTTP/2 其实意识提升了速度性能二是曾加了安全性,应该说使用 SSL 后 HSTS 和 HTTP/2 还是很有必要性的,并且现在国内还没有完全的普及开来,特别是 HTTP/2 几乎国内主流互联网站使用的还少之又少(比如:明月发现 mail.qq.com 和支付宝是 http2 外就没有再发现还有支持 HTTP/2 的了),所以现在就用上 HTTP/2 绝对是个“装逼”神器,Chrome 浏览器有一个插件(HTTP/2 and SPDY indicator)可以判断所访问的网站是否支持 HTTP/2,大家可以安装后看看有多少网站支持 HTTP/2 来了解一下。

历史文章推荐:

  • 本博客公众号
  • 扫一扫关注!
  • weinxin
  • 本博客小程序
  • 微信内浏览本博客
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:28   其中:访客  14   博主  14

    • 钓鱼小站 钓鱼小站 4

      网站换apache了,小站就算了。

      • 十三姨爱我 十三姨爱我 1

        虚拟主机玩不了这个了……上了https的评分都很低。