NGINX或APACHE下为https网站加固增加HSTS协议

什么是HSTS?

HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式。
HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。

如何启用HSTS?

前提要求:已安装https。

NGINX

在对应站点配置文件conf的ssl段(443字眼)内的server{}模块中,增加以下参数

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

注意:Strict-Transport-Security中的max-age的时间值不能小于15552000
完成后重启NGINX生效。

APACHE

在对应站点.conf的 <VirtualHost :443>段内,增加以下内容

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

完成后重启APACHE生效。

缺陷

用户首次访问某网站是不受HSTS保护。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。

测试是否成功

方法一:使用curl命令来测试查看结果,看是否存在Strict-Transport-Security的字段,若有则表示成功。

$ curl -I https://wiki.diahosting.com
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 11 May 2018 13:52:19 GMT
Content-Type: text/html; charset=utf-8
...
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
...


方法二:使用CHROME或FIREFOX浏览器,检查网站首页的header,看是否有Strict-Transport-Security字段。

HSTS评级

通常来说,使用了HSTS协议后,原HTTPS的评级会增高,意味着更加安全。附以下SSL证书评级方法。

https://www.ssllabs.com/ssltest/analyze.html


最后更改: in 2019/05/20 23:26