启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

之所以想起要启用HSTS,主要是最近不少的朋友说网站打不开了,虽然Ping值一切正常,但是就是网页无法访问。猜测可能是DNS解析这一环节出了问题。另外自己本地的DNS劫持已经到了“丧心病狂”的地步了,不加Https访问京东淘宝等全部被加入各种推广。

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

需要注意的是加入HSTS Preload List需要以根域名的形式加入,如果你启用了www.wzfou.com这样的二级域名形式访问,你需要先停止301跳转,即要保证wzfou.com这样的根域名是用Https可以访问到的。(PS:之前我有一个网站就是这样的情况,如有变化大家在申请时结合具体情况分析)。

启用HSTS并加入HSTS Preload List让网站Https访问更加安全-附删除HSTS方法

HSTS是在服务器强化Https安全,如果你的网站还没有启用Https,可以试试免费的SSL证书Let’s Encrypt,最近还推出了免费泛域名证书:Let’s Encrypt Wildcard 免费泛域名SSL证书一键申请与SSL使用教程,更多的关于建站的经验与技巧,你可以看看:

  1. 站长必备技能批量给图片添加水印-XnView和美图秀秀批量处理方法
  2. PayPal连连提现五个注意事项-账号绑定,失败锁定,手续费与提现时长
  3. 自建CDN加速-Nginx反向绑定,缓存加速,自动更新缓存和获取真实IP

PS:2018年8月6日更新,服务器启用SSL证书其实也是一种资源开消,如何最大限度地减少这种资源消耗提升https访问速度,参考这里:八个HTTPS和SSL优化使用心得-减少等待时间和降低Https性能损耗

一、服务器启用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 服务。

map $scheme $hsts_header {
    https   "max-age=31536000; includeSubDomains; preload";
    }
server {
......(others)
  add_header Strict-Transport-Security $hsts_header;
......(others)
}

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?d=wzfou.com

HSTS Preload List达到A+等级

二、加入HSTS Preload List

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

  1. https://hstspreload.org/
  2. https://wzfou.com/cloudflare/

2.1  测试HSTS是否生效

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

HSTS Preload List头部信息

2.2 做好Http跳转Https

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

HSTS Preload List跳转成功

2.3  加入HSTS Preload List

进入hstspreload官网,输入你的域名,然后检测结果会告诉是否符合加入HSTS Preload List,没有问题的话勾选确定。(点击放大)

申请加入HSTS Preload List

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

HSTS Preload List耐心等待

三、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 Preload List搜索查看

3.2  如何撤销HSTS Preload List

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

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

HSTS Preload List删除

四、总结

由于HSTS Preload List是一个内置于各大浏览器的Https网站列表,所以能否加入成功除了审核通过外,还得看浏览器版本的更新。一旦加入HSTS Preload List了想要退出就比较麻烦了,所以加入前一定要考虑好。

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

文章出自:挖站否 https://wzfou.com/hsts-preload/,部分内容参考自泪雪博客  版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。


分享到:
Avatar for Qi
关于站长(Qi),2008年开始混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,但愿将自己经验与心得分享出来与大家共勉。
已有 77 条评论
  1. Avatar for axty axty

    碰到Warning: Unnecessary HSTS header over HTTP可以试试这个:
    Header set Strict-Transport-Security “max-age=63072000; includeSubdomains; preload” env=HTTPS
    在这里面看见的解决方法:https://stackoverflow.com/questions/45022897/warning-unnecessary-hsts-header-over-http

    2022年7月25日 10:55 回复
    • Avatar for Qi Qi

      感谢提供。

      2022年7月26日 21:00 回复
  2. 你的设置好像有问题。使用这样写法可以完善:
    https://www.iowen.cn/when-applying-for-hsts-warning-unnecessary-hsts-header-over-http-method/

    2021年2月6日 11:19 回复
    • Avatar for Qi Qi

      好的,已经更新。

      2021年2月6日 11:28 回复
  3. Avatar for 张玉 张玉

    请问站长,阿里云香港https访问打不开如何解决呢,使用另一个主机商的服务器反向&&可以解决吗?

    2019年6月19日 22:05来自移动端 1 回复
    • Avatar for Qi Qi

      Ping一下是不是IP的问题,如果是IP的问题可以采用+CDN或者反向绑定域名的方式解决,否则如果是域名的问题话,就得换域名了。

      2019年6月20日 16:41 1 回复
      • Avatar for 张玉 张玉

        嗯,之前看到你也有说过阿里云香港https问题,https打不开http能打开,请问您是怎么解决的呢,谢谢了

        2019年6月20日 21:43来自移动端 1 回复
        • Avatar for Qi Qi

          我换成美国的CN2的VPS了,就没有这样的情况了。

          2019年7月2日 16:23 回复
  4. 谢谢分享,不过提醒一下,广告劫持通常与DNS过程无关哦,HSTS也无法规避由DNS劫持带来的网站打开错误

    2018年8月24日 10:42来自移动端 回复
    • Avatar for Qi Qi

      有些劫持不是在http中插入的吗?

      2018年8月24日 11:35 回复
  5. Avatar for 女装Qi 女装Qi

    Nginx 安全配置,做个示例
    nginx.conf
    add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;
    add_header X-Frame-Options deny;
    add_header X-Content-Type-Options nosniff;
    add_header X-XSS-Protection: 1; mode=block
    对了,如何启用LibreSSL(oneinstack已编译了它吗),然后支持CHACHA20?

    2018年7月19日 00:48 回复
    • Avatar for Qi Qi

      oneinsack不支持LibreSSL,可以自己编译进去,支持CHACHA20,看到这个作者采用了此方法:https://iiong.com/https-encryption-chacha20-poly1305.html

      2018年7月19日 16:01 回复
      • oneinsack已启用ALPN了吗,https://sunflyer.cn/archives/406,我是用Debian,那份脚本直接粘贴进Shell执行就好了?非常感谢Qi,向我推荐了优雅的主题,多多益善哈! Material Design♥
        他写出的那些 主题框架和https://demos.creative-tim.com/material-kit-pro/presentation.html,这些是做主题的吧,但好像很难做出,不如买iiong.com的?
        站长用的主题、组件、模块有哪些?全部友链都在朋友圈?

        2018年7月19日 23:34 回复
        • Avatar for Qi Qi

          oneinsack已启用ALPN了,直接粘贴执行那段命令就可以了。
          全部友链在朋友圈。购买主题的话还是用国人的好一些,国外的可能功能强大一些,但是很多功能在国内基本上用不着,还得自己修改。

          2018年7月22日 08:38 回复
      • Avatar for 女装Qi 女装Qi

        Debian9的OpenSSL现在好像是1.1.0,支持CHACHA20吗如何启用

        2018年7月20日 00:25 回复
        • Avatar for Qi Qi

          OpenSSL好像不行,得替换成LibreSSL才行。

          2018年7月22日 08:31 回复
    • Avatar for X X

      add_header X-XSS-Protection: 1; mode=block
      应该写为
      add_header X-XSS-Protection “1;mode=block”;
      多于一个参数需要引号和分号,同“Strict-Transport-Security ”写法
      否则报错哦~

      2020年3月14日 21:19 回复
  6. Avatar for David David

    用中文的和英文的站测出来的是两个不同的,英文的是a+,中文的还是B+

    2018年7月7日 15:10 回复
    • Avatar for Qi Qi

      中文的那个网站好像用的国外的,所以还是以国外的那个为准。

      2018年7月8日 09:00 回复
      • Avatar for David David

        感谢Qi,网站成功加入了。

        2018年7月16日 11:05 回复
  7. Warning: Unnecessary HSTS header over HTTP
    The HTTP page at http://xn--nf1a578axkh.xn--fiqs8s sends an HSTS header. This has no effect over HTTP, and should be removed.
    提交成功,不过有这个提示,刚才那条评论发送成功了没

    2018年7月4日 14:33 回复
    • Avatar for Qi Qi

      我也是这样,是因为用了301跳转,但是只要不影响HSTS就可以了。

      2018年7月4日 16:45 回复
      • 好像没收到贵站的评论回复通知邮件?

        2018年7月5日 11:19 回复
      • Avatar for X X

        这个是因为80 433监听在同一个server下,把监听80的server独立出来就好

        2020年3月14日 21:04 回复
    • Avatar for X X

      这个是因为80 433监听在同一个server下,把监听80的server独立出来就好[阴险]

      2020年3月14日 21:04 回复
  8. 提交成功,不过有个Warning提示
    Warning: Unnecessary HSTS header over HTTP
    The HTTP page at http://xn--nf1a578axkh.xn--fiqs8s sends an HSTS header. This has no effect over HTTP, and should be removed.

    2018年7月4日 14:31 回复
    • Avatar for Qi Qi

      博主,你的博客评论无法提交:{“error”:”get from image source failed: E405″}

      2018年7月4日 16:48 回复
      • 谢谢提醒,已修复好,七牛云cdn导致评论出问题的。

        2018年7月5日 11:18 回复
  9. Avatar for 罗小黑 罗小黑

    还是不能访问啊,和以前一样,换证书大概也米用,还有你开了什么缓存?没有设置登录用户重定向啊,登录以后不会自动刷新跳转,得手动刷新才显示登录状态,我说登录了想评论一看还得输入邮箱,再一看没有登录,还是静态页面,刷新就显示登录了

    2018年4月15日 12:24 回复
    • Avatar for Qi Qi

      非电信的用户访问的是103.27.186.199 这个缓存节点,需要手动刷新才行。还有一个是源站:47.52.169.125 。

      2018年4月15日 22:39 回复
  10. 加一贴,nginx官方给出的配置参数不太一样,是这样的:
    add_header Strict-Transport-Security “max-age=31536000; includeSubDomains” always;
    并且(这段我没太看懂),官方的说法称如果写在location段中,要再声明一遍STS头?
    https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

    2018年4月11日 23:23 回复
    • Avatar for Qi Qi

      是的,always 貌似NGINX 1.7.5 以前的版本不支持,preload和always应该都可以。

      2018年4月12日 14:44 回复
      • 原来如此

        2018年4月12日 16:32 回复
      • Avatar for X X

        然而always 不能通过https://hstspreload.org检测….

        2020年3月14日 21:39 回复
        • Avatar for Qi Qi

          后期应该可以了。

          2020年3月17日 13:00 回复
  11. 一直只停留在A,没想到变成A+就是这么一道美容手术的事。立马在nginx中增加了这样一条,一查,果然多了个+号。

    2018年4月11日 23:12 回复
  12. Avatar for 折鹤 折鹤

    HSTS preload是不是可以绕开BA?因为BA是针对80口,hsts preload之后浏览器自动访问443口了

    2018年4月11日 09:46 回复
    • Avatar for Qi Qi

      可以,但是阿里云也会有检测机制,发现443端口流量多的话也会起疑心。

      2018年4月11日 12:36 回复
      • Avatar for 重点问题放最后 重点问题放最后

        云好像就是集群VPS?为何还比VPS贵……外国VPS怎么BA?BA是针对域名的吧只是主机商只检测80端口?被*一般是IP还是域名还是端口,改端口可以防检测或重新访问吗,会不会恶性影响SEO和Oneinstack等设置
        强制全走https的话,http端口和ftp端口要不要关闭,https://oneinstack.com/docs/securitygroup为什么说要打开这么多ftp端口?
        Oneinstack在一键https后会自动启用HSTS吗?我发现BA对版权什么的几乎没影响,但震惊的是一些较隐蔽如外链或虚拟H内容的也BA了!怎么做到的、QI如何看待?

        2018年7月19日 00:20 回复
        • Avatar for Qi Qi

          1、云主机主要优势在于易于扩展,比如加个内存、硬盘等都是没有问题,传统的VPS的就做不到这一点,当然还有其它的如负载均衡等。
          2、国外主机不用BA了,只有国内的主机才要求BA,与域名无关。除了检测80端口,个别还会检测443端口。
          3、被Q一般是IP或者域名,端口很少被QQ了。改其它的端口肯定会影响访问,因为用户不会在域名后面加上端口号来访问 。
          4、强制Https后,不要关闭Http端口,FTP可以关闭,没有什么用,还容易遭受攻击。
          5、Oneinstack在一键https后会没有启用HSTS,需要像本文这样手动添加。
          6、有些域名虽然BA了,但是可能被别人买走了,或者转给别人了,内容自然就会乱七八糟的,不过这类的域名BA号也掉得快。

          2018年7月19日 16:20 回复
  13. 给站长提两个事。
    1,遇到个事,可供站长写篇文章出来。Digital Ocean和VestaCP的新闻,这两天曝出来的,Vesta今天才升级面板版本号,但据说Repo还没修正完毕,因此现在它家的面板也不能保证安装的安全。因它家的密码体系出了问题,导致Digital Ocean的工程师这几天一直在忙,大批的VPS和主机使用VestaCP的被攻下。
    2,因为想通知站长写这么篇VPS业内的事情,因此过来登陆想发个贴,结果突然发现Github无法登录,后来修改完密码才发现原来站长的Github登录的图标弄得跟#的一样,搞得我以为站长取消了Github登录了。希望站长尽快把图标换一换,Github的猫头多好。

    2018年4月9日 19:21 回复
    • Avatar for Qi Qi

      谢谢!
      1、已经更换图标了,原插件貌似就是这样的图像,我给它换成猫头了。
      2、VestaCP与Digital Ocean?其它的VPS只要安装了VestaCP是不是也有问题。

      2018年4月9日 22:25 回复
      • 应当是的。这个事现在搞大了,LowEnd Talk 上面炸开了,大体说是可能有人在面板程序发布前就在它们的REPO中插入手脚,所以不管用户怎么安装,都有问题。里面的代码装完都是用root权限运行的,会在特定时间把VPS当肉鸡向外攻击,导致DO把它的8083端口封死,工程师忙死。
        https://www.lowendtalk.com/discussion/141728/vestacp-possibly-hit-with-zeroday-exploit-patch-released
        Vesta官方论坛现在尽是这方面的贴子,官方的办法是先停止面板运行,并且更改端口号,但实际上已经来不及了,新升级补丁其实也没有用,因为内部有问题的木马是用root运行的嘛。我查看了下自己的,也有。这就解释了之前安装在两台机器上的安装程序在安装过程中出现一些奇怪的问题,比如似乎一个什么iocube的程序(据说管php加解密的?)安装出错,而我明明装了SSL证书但访问起来却时好时坏,搞得我以为我的内存不足死机,配置了半天SSL和nginx都有问题,甚至网站还会出现被暂停的警告。现在看了好多贴子,发现根源在这里。自己不会清除木马,只能放弃掉里面的文档,全机重装!可惜机器里还有内容涉及到自己域名邮箱管理员账号,还有更要命的是有申请LE和acme.sh授权用的API信息……你看看吧,这种事情。其实更不保险的是,网站的SSL证书什么的全落里面了,连带可能一些文件中可能间接含有信用卡信息。

        2018年4月10日 01:44 回复
          • 官方论坛就有网友提过,一个人没出事,不代表就是安全的。实际上后面有人指出过,这个问题出自于REPO,因官方面板会在后台更新,因此做案的很可能是在官方REPO中动了手脚,最后面板自动更新程序,就产生了问题。光是后门程序,之前可能一年多时间前吧,就曝出来了漏洞(就相当于有人向乌云类似的组织提交过),所以不太可能Vesta没有关注到,但它们大概是没想到过自己的REPO库里被人侵入了,导致这些后门程序天然的拥有了root权限。

            2018年4月10日 12:55 回复
        • 可能它并不是在安裝過程中就存在的 ;D 。

          2018年4月10日 11:52 回复
          • 我这两天一直在几个站看这个事有关的贴,据说有人很早前装了Vesta,但一直未更新也把更新关闭的,这次没中招,但近期安装的,基本都中招。官站有人因此提出可以查一下这个问题,就是在某段时间内REPO被植入,但好象官方即便发布了20版的更新,也没有直接回应这个问题究竟出在哪里,让一些人怀疑这个问题的根子并没有解决,也就是关闭掉8083端口起不了作用。此外,凌晨时看到还有人说,装了20版,机器也仍然出问题的。所以本来一直我在用Vesta,用于生产环境,但是现在只能观望,暂时在选择其它的办法。

            2018年4月11日 22:16 回复
  14. 难怪感觉你WZfou访问快了,飞一般的打开速度。

    2018年4月9日 17:02 回复
    • Avatar for Qi Qi

      少了DNS干扰还是挺好的。

      2018年4月9日 22:25 回复
  15. 相当于301跳转么

    2018年4月9日 11:46来自iPhone 回复
    • Avatar for Qi Qi

      比301跳转要好,相当于直接访问Https,没有经过跳转。

      2018年4月9日 12:36 回复
  16. 以前试过HSTS,但是由于有的时候需要将子域名用来本地开发,每次都要配置HTTPS好麻烦,就去掉了

    2018年4月9日 09:40 回复
    • 确实,开启HSTS后服务器上面的所有域名都要配置HTTPS,后来还是把HSTS关闭了。

      2018年4月9日 10:21 回复
      • Avatar for Qi Qi

        同一个IP上网站域名都要上Https?

        2018年4月9日 11:13 回复
        • 是的,如果你不部署也会给你强制跳转到https,导致无法打开。

          2018年4月9日 11:44 回复
    • Avatar for Qi Qi

      本地开发再单独整个域名。

      2018年4月9日 11:14 回复
      • 博主,你这回复进我的垃圾箱了

        2018年4月9日 14:15 回复
      • 就这个outlook的有问题,别的邮箱正常

        2018年4月9日 14:16 回复
        • Avatar for Qi Qi

          谢谢,可能是发信太频繁的原因,评论回复目前用的是Gmail的。

          2018年4月9日 22:26 回复
  17. wzfou 能打开真不容易啊

    2018年4月9日 02:35 回复
    • Avatar for Qi Qi

      为啥?这次是没有用QQ直接打开的?

      2018年4月9日 11:16 回复
  18. 我的小博客 去年也加入了 HSTS Preload List

    2018年4月9日 01:44 回复
    • Avatar for Qi Qi

      加入HSTS还是有好处,防劫持效果不错。我这里打开X宝不用Https,DNS劫持严重。

      2018年4月9日 11:19 回复
  19. 如果想要防数据劫持或广告插入不仅要看https,还要看浏览器。比如UC#到最底下的时候会经常出现不相干的广告。

    2018年4月8日 21:20 回复
    • Avatar for Qi Qi

      有些流氓浏览器也是没办法。

      2018年4月9日 11:19 回复
  20. Avatar for ne ne

    Status: wzfou.com is currently preloaded.
    恭喜Qi加入成功。

    2018年4月8日 20:29 回复
    • 专门看了看这站的LE申请时间,是春节后那段时间,居然跟我的差不多,可配置的不错,我的现在还没达到A+级,断续的都换了几个LE的证书了,还没搞太明白这货该怎么弄。 🙁

      2018年4月9日 19:24 回复
      • Avatar for Qi Qi

        根据这个评分提示在服务器增加几项安全性就可以达到A+了。

        2018年4月9日 22:23 回复
  21. 我使用Oneinstack,未經任何修改,SSLLabs它顯示「Strict Transport Security (HSTS) = Yes」= =???

    2018年4月8日 19:47 回复
    • Avatar for Qi Qi

      是不是新版的还是老版本的?貌似以前作者是用脚本自动加进去的,不过前一段时间我安装后发现又没有自动添加这个。

      2018年4月9日 11:21 回复
    • HSTS和HSTS Preload是不一样的。

      2018年4月13日 19:05 回复
  22. 告诉你个最简单启用HSTS的办法,在VPS上装个最新的AMH面板,然后下载AmSSL插件就能启用HSTS了,小白用户可以试试!

    2018年4月8日 19:21来自移动端 回复
    • Avatar for Qi Qi

      谢谢,看来AMH还是挺方便的。

      2018年4月9日 11:22 回复

Login

Welcome! Login in to your account

Remember me Lost your password?

Don't have account. Register

Lost Password

Register