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

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/,部分内容参考自泪雪博客  版权所有。本站文章除注明出处外,皆为作者原创文章,可自由引用,但请注明来源。

关于站长(Qi),8年前经常混迹于免费资源圈中,有幸结识了不少的草根站长。之后自己摸爬滚打潜心学习Web服务器、VPS、域名等,兴趣广泛,杂而不精,愿意将自己经验与心得分享出来,与大家共勉。

62 个评论

  • 江南Lover 回复

    2018年4月8日 at 下午7:21

    告诉你个最简单启用HSTS的办法,在VPS上装个最新的AMH面板,然后下载AmSSL插件就能启用HSTS了,小白用户可以试试!

    • Qi 回复

      2018年4月9日 at 上午11:22

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

  • Xin 回复

    2018年4月8日 at 下午7:47

    我使用Oneinstack,未經任何修改,SSLLabs它顯示「Strict Transport Security (HSTS) = Yes」= =???

    • Qi 回复

      2018年4月9日 at 上午11:21

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

    • 伤心的笔 回复

      2018年4月13日 at 下午7:05

      HSTS和HSTS Preload是不一样的。

  • ne 回复

    2018年4月8日 at 下午8:29

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

    • baoang 回复

      2018年4月9日 at 下午7:24

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

      • Qi 回复

        2018年4月9日 at 下午10:23

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

  • Lisa.Su 回复

    2018年4月8日 at 下午9:20

    如果想要防数据劫持或广告插入不仅要看https,还要看浏览器。比如UC#到最底下的时候会经常出现不相干的广告。

    • Qi 回复

      2018年4月9日 at 上午11:19

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

  • 老鬼 回复

    2018年4月9日 at 上午1:44

    我的小博客 去年也加入了 HSTS Preload List

    • Qi 回复

      2018年4月9日 at 上午11:19

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

  • john 回复

    2018年4月9日 at 上午2:35

    wzfou 能打开真不容易啊

    • Qi 回复

      2018年4月9日 at 上午11:16

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

  • 或者现在 回复

    2018年4月9日 at 上午9:40

    以前试过HSTS,但是由于有的时候需要将子域名用来本地开发,每次都要配置HTTPS好麻烦,就去掉了

    • xiaoz 回复

      2018年4月9日 at 上午10:21

      确实,开启HSTS后服务器上面的所有域名都要配置HTTPS,后来还是把HSTS关闭了。

      • Qi 回复

        2018年4月9日 at 上午11:13

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

        • xiaoz 回复

          2018年4月9日 at 上午11:44

          是的,如果你不部署也会给你强制跳转到https,导致无法打开。

    • Qi 回复

      2018年4月9日 at 上午11:14

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

      • 或者现在 回复

        2018年4月9日 at 下午2:15

        博主,你这回复进我的垃圾箱了

      • 或者现在 回复

        2018年4月9日 at 下午2:16

        就这个outlook的有问题,别的邮箱正常

        • Qi 回复

          2018年4月9日 at 下午10:26

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

  • Mark Pron 回复

    2018年4月9日 at 上午11:46

    相当于301跳转么

    • Qi 回复

      2018年4月9日 at 下午12:36

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

  • 国外网赚 回复

    2018年4月9日 at 下午5:02

    难怪感觉你WZfou访问快了,飞一般的打开速度。

    • Qi 回复

      2018年4月9日 at 下午10:25

      少了DNS干扰还是挺好的。

  • baoang 回复

    2018年4月9日 at 下午7:21

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

    • Qi 回复

      2018年4月9日 at 下午10:25

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

      • baoang 回复

        2018年4月10日 at 上午1:44

        应当是的。这个事现在搞大了,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证书什么的全落里面了,连带可能一些文件中可能间接含有信用卡信息。

        • Xin 回复

          2018年4月10日 at 上午11:47

          我使用的也是VestaCP,并未出現您上述問題,請注意修改8083埠。
          https://forum.vestacp.com/viewtopic.php?f=10&t=16556&start=260#p68893
          https://itldc.com/blog/vozmozhnaya-uyazvimost-v-vesta-i-sposob-lecheniya-ot-trojan-ddos_xor/

          • baoang 回复

            2018年4月10日 at 下午12:55

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

        • Xin 回复

          2018年4月10日 at 上午11:52

          可能它并不是在安裝過程中就存在的 ;D 。

          • baoang 回复

            2018年4月11日 at 下午10:16

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

  • 折鹤 回复

    2018年4月11日 at 上午9:46

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

    • Qi 回复

      2018年4月11日 at 下午12:36

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

      • 重点问题放最后 回复

        2018年7月19日 at 上午12:20

        云好像就是集群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如何看待?

        • Qi 回复

          2018年7月19日 at 下午4:20

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

  • baoang 回复

    2018年4月11日 at 下午11:12

    一直只停留在A,没想到变成A+就是这么一道美容手术的事。立马在nginx中增加了这样一条,一查,果然多了个+号。

  • baoang 回复

    2018年4月11日 at 下午11:23

    加一贴,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/

    • Qi 回复

      2018年4月12日 at 下午2:44

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

  • 罗小黑 回复

    2018年4月15日 at 下午12:24

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

    • Qi 回复

      2018年4月15日 at 下午10:39

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

  • 黄良钵 回复

    2018年7月4日 at 下午2:31

    提交成功,不过有个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.

    • Qi 回复

      2018年7月4日 at 下午4:48

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

      • 黄良钵 回复

        2018年7月5日 at 上午11:18

        谢谢提醒,已修复好,七牛云cdn导致评论出问题的。

  • 黄良钵 回复

    2018年7月4日 at 下午2:33

    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.
    提交成功,不过有这个提示,刚才那条评论发送成功了没 smoke

    • Qi 回复

      2018年7月4日 at 下午4:45

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

      • 黄良钵 回复

        2018年7月5日 at 上午11:19

        好像没收到贵站的评论回复通知邮件? headbang

        • Qi 回复

          2018年7月5日 at 下午4:23

          出现错误提示:Invalid “To” e-mail address “i@xn--nf1a578axkh.xn--fiqs8s”。好像是邮箱的问题。

          • 黄良钵 回复

            2018年7月5日 at 下午7:02

            那我下次换个邮箱评论了 laugh

            • Qi 回复

              2018年7月5日 at 下午10:50

              哈哈,现在正常了。

              • 黄良钵 回复

                2018年7月6日 at 上午8:48

                嗯,收到了,不过是在垃圾邮件里 giggle

  • David 回复

    2018年7月7日 at 下午3:10

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

    • Qi 回复

      2018年7月8日 at 上午9:00

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

      • David 回复

        2018年7月16日 at 上午11:05

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

  • 女装Qi 回复

    2018年7月19日 at 上午12:48

    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?

    • Qi 回复

      2018年7月19日 at 下午4:01

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

      • AKINA改 回复

        2018年7月19日 at 下午11:34

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

        • Qi 回复

          2018年7月22日 at 上午8:38

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

      • 女装Qi 回复

        2018年7月20日 at 上午12:25

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

        • Qi 回复

          2018年7月22日 at 上午8:31

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

发表评论

Login

欢迎!请登录你的账号。

记住我 忘记密码?

还未注册 注册

Lost Password

Register

返回顶部