启用HSTS并提交至预加载列表

本文教程采用张戈博客例子完成

一、HSTS协议:

这里我们要借助一个新的安全协议:HSTS

HSTS(HTTP Strict Transport Security)国际互联网工程组织 IETE 正在推行一种新的 Web 安全协议,作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。

主要目的是为了解决 HTTPS 网站首次请求时使用的是未加密的 HTTP 协议,也就说用户一般访问我们的网站都是直接在浏览器输入域名,比如 zhangge.net,然后我们的服务器检测到是 HTTP 请求,就 301 跳转到 HTTPS 页面。那么前半程采用的就是未加密的 HTTP 请求,同样存在被劫持的可能,那么 HTTPS 说好的安全性也就大打折扣了!

在我看来,HSTS 还有另外一层好处:增强网站的兼容性。

以往分享的全站 HTTPS 都是采用 301 强制性跳转,而且还会区分下低版本 IE、不支持 HTTPS 的搜索引擎来忽略 301 跳转,很明显这样做无法照顾到所有情况。那么如果是用 HSTS 呢?

采用 HSTS 后,支持这个协议的浏览器会自动跳转到 HTTPS 页面,返回码为 307。

而不支持 HSTS 的浏览器访问我们的网站,则不会产生跳转,从而提高了兼容性。这个机制对于不支持 HTTPS 的搜索引擎来说是非常友好的做法了!

二、开启HSTS(宝塔为例)

开启 HSTS 很简单,只要在我们网站的响应头里面新增 HSTS 即可

Nginx 服务器:

在站点 server 模块内插入如下配置并重启:

Apache 服务器

Apache 如下配置并重启:

LigHttpd

将下述配置增加到你的 Lighttpd 配置文件(一般是 /etc/lighttpd/lighttpd.conf)并重启:

通用方法

如果你用的虚拟主机,或者不会折腾 WEB 软件,那么可以采用更简单的通用方法。原理很简单,通过代码来新增响应头即可,这里只分享一下 php 的做法,其他语言自行参考:

将如下代码插入到网站根目录的 index.php 即可:

三、相对链接

当然,为了兼容不支持 HTTPS 的客户端,我们还需要将网站的所有超链接都改成相对模式:

比如,正常的页面链接如下所示:

改成相对模式:

直接粗暴替换前台输出的代码即可(以下代码添加至function.php中):

四、提交HSTS

上文已介绍了 HSTS,主要是为了解决 HTTP 请求 301 跳转到 HTTPS 这个过程被劫持问题,而实际上就算加上 HSTS 响应头,用户请求的前半程依然是 HTTP,并没有什么 L 用。

提出这个协议的砖家们就想出了一个解决办法:将支持 HSTS 的网站全部加入一个 Preload 的清单,支持 HSTS 协议的浏览器请求网站前会查询当前网站是否在清单中,如果是那么直接转换为 HTTPS 请求!从而解决前半程为 HTTP 的问题(不专业,但说人话。。。)。

那么,如果我们的网站启用了 HSTS,还得将网站提交到这个 Preload 清单才行了

参与评论

  • ZAERA博客

    这个还没提交,懒得弄

    3周前 (04-28)
    回复
  • boke112导航

    这个我也早已提交了,感觉HTTPS是趋势,加入这个HSTS应该还是很不错的

    4周前 (04-26)
    回复
  • 心动

    嗯,是的,是趋势,好在发布此文章时提交的,现在已经提交到预加载列表了,蛮开心[aru_36]

    4周前 (04-26)
    回复