群晖WebStation中HSTS选项HTTPS Header修改

2020-02-23T17:17:00

注意事项

[scode type="info"]两种方法的原版文件权限均为644ownerroot,因此修改原文件需要root账户权限[/scode]
[scode type="yellow"]强烈建议修改文件前事先备份原文件,以免因胡乱修改造成WebStation崩溃[/scode]

问题描述

通过群晖建站时,在WebStation虚拟主机设置中为了实现HSTS,已勾选HSTS按钮。但原版WebStation设置中HSTS的Header并不符合加入到HSTS preload list中的要求,主要表现为:

  1. Headermax-age15768000,不足一年
  2. Header中没有includeSubDomainspreload

因此考虑修改WebStation中关于HSTS的模板文件以满足加入HSTS preload list的要求。

修改WebStation中HSTS模板文件

通过不断摸索,找到了WebStation中控制HSTS选项的模板文件,路径为/volume1/@appstore/WebStation/misc/SSLProfile.mustache,可以通过Winscp或者Putty修改该文件,将原文件中的

{{#SSLProfile.hsts}}add_header  Strict-Transport-Security max-age=15768000;{{/SSLProfile.hsts}}

修改为

{{#SSLProfile.hsts}}add_header  Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";{{/SSLProfile.hsts}}

[scode type="yellow"]其中max-age必须至少为31536000,即一年时间[/scode]
修改后保存文件,进入WebStation的虚拟主机界面,重新启用HSTS即可。如果之前HSTS已经勾选,需要取消勾选,保存后再次勾选启用。

验证是否成功修改HSTS

启用HSTS后,进入搭建好的网站,浏览器按F12进入开发者模式,进入NetworkCtrl+F5清除浏览器缓存刷新,选中ALL中的任意元素,在Headers中的Response Headers中如果发现Strict-Transport-Security: max-age=63072000; includeSubDomains; preload字样,则说明修改成功。
[scode type="yellow"]如果按照上述步骤配置失败,可以尝试在完成上述步骤后,在群晖软件中心先停用正在运行的WebStation,然后再重新启动,再验证是否修改成功[/scode]

其他方式探索

建站时群晖后端选择的是Apache 2.4,因此在这里仅以Apache 2.4为例,Nginx可查看网上其他教程。修改群晖Apache 2.4的配置文件也可以改变header中HSTS的内容。
[scode type="yellow"]严格意义上并不推荐此方法,因为会影响所有以Apache 2.4为后端的WebStation虚拟主机,而以Nginx其他Apache版本为后端的虚拟主机仍然不受影响,还会继续维持原来的状态[/scode]
[scode type="red"]若通过此方法修改,则WebStation设置虚拟主机时,必须取消勾选HSTS,以防止Header中出现2个HSTS报文[/scode]

修改群晖Apache 2.4配置文件

经过探索,发现群晖Apache 2.4配置文件的路径为/volume1/@appstore/Apache2.4/usr/local/etc/apache24/conf/httpd24.conf,通过Winscp或者Putty找到其中的

……
<IfModule unixd_module>
    User http
    Group http
</IfModule>

ErrorLog /run/apache24-error_log
TraceEnable off
LogLevel error
……

在这段后加入

#HSTS
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>

[scode type="yellow"]其中max-age必须至少为31536000,即一年时间[/scode]
加入后整体效果为

……
<IfModule unixd_module>
    User http
    Group http
</IfModule>

ErrorLog /run/apache24-error_log
TraceEnable off
LogLevel error

#HSTS
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
</IfModule>
……

确认无误后保存。之后可以在软件中心重启Apache 2.4,或者通过Putty执行synoservice --restart pkgctl-Apache2.4命令重启Apache 2.4,然后按前文所述的方法检查是否成功修改HSTS。

当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »