启用HSTS并加入HSTS Preload List-附删除HSTS方法

VPS消息4字数 3310阅读模式

启用HSTS可以保证自己的网站更稳定的被访问,不被运营商各种干扰,劫持,访问时候加入各种广告。启用HSTS后自然想要加入HSTS Preload List了,这是各大浏览器都遵循的一个强制使用Https访问的网站列表,只要加入到这个列表中,所有的通过浏览器访问请求都会强制走Https,这在很大程度上可以杜绝“第一次”访问的劫持,最大限度地提高Https访问的安全性。

需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.daniao.org这样的二级域名形式访问,你需要先停止301跳转,即要保证daniao.org这样的根域名是用Https可以访问到的。启用HSTS并加入HSTS Preload List-附删除HSTS方法

HSTS是在服务器强化Https安全,如果你的网站还没有启用Https,可以试试免费的SSL证书Let’s Encrypt。服务器启用SSL证书其实也是一种资源开消,我们需要最大限度地减少这种资源消耗提升https访问速度。启用HSTS便是一种很好的选择。

一、服务器启用HSTS

也普及下HSTS基本知识:HSTS是国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。

1.1  Apache2 配置 HSTS

编辑你的 apache 配置文件(如 /etc/apache2/sites-enabled/website.conf 和 /etc/apache2/httpd.conf ),并加以下行到你的 HTTPS VirtualHost:

# Apache需加载mod_header库,一般位于httpd.conf文件,搜索mod_headers并取消注释。(已加载可跳过)
LoadModule headers_module modules/mod_headers.so   #然后对应站点VirtualHost里面插入HSTS响应头信息

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

保存 Apache 配置文件,然后重启。现在你的 web 站点在每次访问时都会发送该请求头,失效时间是两年(秒数),这个失效时间每次都会设置为两年后。

1.2  Nginx 配置 HSTS

Nginx 服务器中的配置最为简单,只需要编辑 Nginx 配置文件(如:/usr/local/nginx/conf/nginx.conf)将下面行添加到你的 HTTPS 配置的 server 块中即可:

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";

如果你发现直接添加在 server 块中无效的情况,你可以试试直接插入到 location ~ *php 内:

location ~ [^/]\.php(/|$) {
	add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
}

配置保存后重启 Nginx 服务。

1.3  在 Lighttpd 中配置 HSTS

将下述配置增加到你的 Lighttpd 配置文件(例如:/etc/lighttpd/lighttpd.conf):

server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
	setenv.add-response-header  = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

编辑保存后记得重启一下。

1.4  PHP通用配置 HSTS 方法

将以下代码添加到网站根目录 index.php 中或者header.php中

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

开启了HSTS后,你部署SSL/TLS的服务检测得分就可能是A+以上了。ssllabs官网以及演示如下:

  1. 官网:https://www.ssllabs.com/
  2. 中文版:https://myssl.com
  3. 测试地址:https://www.ssllabs.com/ssltest/analyze.html

启用HSTS并加入HSTS Preload List-附删除HSTS方法

二、加入HSTS Preload List

HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

  1. https://hstspreload.org/

2.1  测试HSTS是否生效

直接打开Chrome查看网络,就可以看到头部已经包含了HSTS信息了。

启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

2.2 做好Http跳转Https

将daniao.org以及任意二级域名都要做好Http跳转到Https,启用了HSTS后请求地址为 header 头中的 Location会显示307 ,即要求浏览器继续向 Location 的地址 POST 内容。

启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

2.3  加入HSTS Preload List

进入hstspreload官网,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

HSTS Preload List审核的时间有长有短,一旦提交后你就只能等待。

启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

三、HSTS Preload List问题

3.1  是否成功加入HSTS Preload List

直接到下列网址搜索是否有你的域名即可:

  1. https://cs.chromium.org/chromium/src/net/http/transport_security_state_static.json

当然,加入到了HSTS Preload List后,你可能还需要等待1-2月,待新版本的Chrome和Chromium、Firefox、IE等发布后,你的域名算是正式被各大浏览器承认并强制使用Https访问了,你可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。

启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

3.2  如何撤销HSTS Preload List

  1. https://hstspreload.org/removal/

官方也提供了一个申请删除HSTS Preload List,不过需要注意的是撤销HSTS Preload List和加入HSTS Preload List一样,花费的时间可能需要几个月以上,所以申请HSTS Preload List前一定要谨慎。

启用HSTS并加入HSTS Preload List-附删除HSTS方法

 

四、总结

由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。也就是说开启HSTS后服务器上面的同一个根域名的所有子域名都要上Https,所以有的时候我们需要将子域名用来本地开发,每次都要配置HTTPS还是很麻烦的!而且同一个IP上网站域名都要上Https,如果你不部署也会给你强制跳转到https,导致无法打开,这真的是很麻烦。

那么哪些网站适合加入HSTS Preload List?个人博客或者网站可以来玩一玩,对于安全性要求比较高的电商网站,会员管理后台等完全可以使用HSTS Preload List,对于一些有Http需要的还是不加入得好。

虽然说https防劫持的效果很好,有的时候想要防数据劫持或广告插入不仅要看https,还要看浏览器。比如UC拉到最底下的时候会经常出现不相干的广告。所以说就算你加入了https也不是万能的,有些流氓浏览器真的没办法。广告劫持通常与DNS过程无关,即使HSTS也无法规避由DNS劫持带来的网站打开错误,这些大家也要了解一下!

 

weinxin
我的微信
微信公众号
关注大鸟博客公众号
 最后更新:2019-1-30
大鸟
  • HSTS Preload List
  • 删除HSTS
  • 申请HSTS
评论  4  访客  4
    • mactie
      mactie 0

      写得很好。有两点:1.自己修改网站配置将http重定向到https也能实现强制https,感觉HSTS不是必需的。2.总结里讲“同一个IP上网站域名都要上Https”是不是笔误了,应该是说同一个根域名的所有子域名都要上Https?

        • 大鸟
          大鸟

          @ mactie 感谢指正,感谢支持,已经修改!

        • 简简单单
          简简单单 0

          1.2 Nginx 配置 HSTS
          没有针对在http形式下的头进行分别处理,现在测试站会提示在http下这是无用的配置。
          可能无害,但是无用,要不要多加个判断,分别给与不同的变量值。

          • 佛系软件
            佛系软件 2

            不行啊,NGINX和php的都加上去了,火狐浏览器都是禁用

          匿名

          发表评论

          匿名网友

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

          确定