Apache开启HSTS (HTTP Strict Transport Security)

重定向HTTP至HTTPS并不能解决劫持问题,而且现在很多运营商劫持行为很普遍、WIFI热点劫持也非常多,在HTTP跳转至HTTPS之前就会劫持用户,这些都存在着很大的安全风险。因此,HSTS (HTTP Strict Transport Security,即HTTP严格传输安全) 就显得很重要了。
设置很简单,这里以Apache默认的SSL站点为例。首先启用Mod_Headers模块。

a2enmod headers

然后打开HTTPS站点的配置文件。

vi /etc/apache2/sites-available/default-ssl.conf

在<VirtualHost *:443>中添加如下内容。

# HSTS (mod_headers is required) (15768000 seconds = 6 months)
Header always set Strict-Transport-Security "max-age=15768000; includeSubDomains; preload"

max-age为HSTS过期时间,一般建议不小于18周(10886400秒),这里设置为6个月,includeSubDomains是指包含子域名,为了最大程度地保护该域名下地所有站点,建议加上,而如果某个子域名不强制使用HTTPS,就不要在根域名加。preload代表启用HSTS Preload (HSTS预加载),只有被浏览器预加载的HSTS,才能够保证在任何情况下都不被劫持,否则在第一次访问该站点时还是有被劫持的可能。
最后再重启一下Apache使配置生效。

service apache2 restart

好了,HSTS已经可以使用了。再也不用担心用户访问自己的网站时被劫持了。当然,如果不启用HSTS Preload,第一次访问或者上面设置的半年时间失效后的第一次访问,还是有可能被劫持的。如果要启用HSTS Preload,在设置好上面的内容之后,还要去下面这个网址提交你的域名。方法很简单,照着提示做就好。
https://hstspreload.appspot.com/
需要注意的是,按照提交的要求,preload必须和includeSubDomains一起使用,并且保证max-age不小于18周,当然,使用有效并且可信的SSL证书,设置HTTP重定向到HTTPS这类常规要求肯定是要的。
有人觉得HSTS配置也可以写在.htaccess中,但其实Apache和HSTS规范中都是不建议这样做的,因为这会导致访问HTTP站点时也会收到HSTS Header。当然,这其实不是个问题,因为HSTS本身就是为强制使用HTTPS访问设计的,但规范中是不建议的。


评论

《“Apache开启HSTS (HTTP Strict Transport Security)”》 有 1 条评论

  1. […] 关于HSTS的详细设置,请参见另一篇文章:Apache开启HSTS (HTTP Strict Transport Security)。 […]

发表评论