, It's sunny

关于HSTS

HSTS(HTTP Strict Transport Security)国际互联网工程组织 IETF 正在推行一种新的 Web 安全协议

HSTS 的作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。服务器开启 HSTS 的方法是,当客户端通过 HTTPS 发出请求时,在服务器返回的超文本传输协议响应头中包含 Strict-Transport-Security 字段。非加密传输时设置的 HSTS 字段无效。

比如,https://xxx 的响应头含有Strict-Transport-Security: max-age=31536000; includeSubDomains。这意味着两点:

在接下来的一年(即 31536000 秒)中,浏览器只要向 xxx 或其子域名发送 HTTP 请求时,必须采用 HTTPS 来发起连接。比如,用户点击超链接或在地址栏输入 http://xxx/ ,浏览器应当自动将 http 转写成 https ,然后直接向 https://xxx/ 发送请求。

在接下来的一年中,如果 xxx 服务器发送的 TLS 证书无效,用户不能忽略浏览器警告继续访问网站

摘自百度百科

简单来说就是告诉浏览器,在接下来一年时间内,必须通过 HTTPS 发起连接,无法降级为 HTTP, SSL 证书过期也会通过 HTTPS 发起连接,即使浏览器提示危险(例如:chrome)
以上个人理解,如有勿,望指正,勿喷~

配置HSTS

我用的是宝塔的 nginx
将下列代码加入到站点配置中server
改完需重启nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
当然用户第一次建立连接用的不是 HTTPS ,而是HTTP则不会跳转到 HTTPS ,那我们的 HSTS 就不会生效,所以我们要加个跳转
同样添加在 server 内加入一下代码
if ($server_port = 80 ) {
return 301 https://$host$request_uri;
}

如图所示
Nginx 配置图

评级

此时你可以到 SSL/TSL安全评估评级
HSTS 对评级影响很大

如图:
Myssl 评分图

最后

  • 这个很早就想弄了,太懒了:p
  • 如有不对之处望指正~

HTTPS HSTS