起因

搞 HTTPS 时在Myssl网站测试评级时,发现了关于 HSTS 的相关信息

开启HSTS前

开启 HSTS 后网站评级即可到A+(虽然没什么用),但是作为一名合格的强迫症患者,还是要折腾一下

关于HSTS

HSTS 的全称是 HTTP Strict-Transport-Security. 它是国际互联网工程组织 IETF 发布的一种互联网安全策略机制。采用 HSTS 策略的网站将保证浏览器始终链接到该网站的 HTTPS 加密版本。不需要用户手动在URI地址栏中输入加密地址,来减少会话被劫持的风险。

宝塔有关于强制 HTTPS 的选项,宝塔强制 HTTPS 的是通过 301 重定向实现的,访问网站第一次握手仍然是 HTTPS 访问,攻击者完全可以在用户发出 HTTP 请求时,劫持并篡改该请求。 HSTS 的作用,就是强制浏览器只能发出HTTPS请求,并阻止用户接受不安全的证书。

宝塔关于强制 HTTPS 的设置

配置HSTS

add_header Strict-Transport-Security "max-age=31536000";

上面这段头信息有两个作用:

  • 在接下来的一年(即31536000秒)中,浏览器只要向example.com或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。用户点击超链接或在地址栏输入http://www.example.com/,浏览器应当自动将http转写成https,然后直接向https://www.example.com/发送请求。
  • 在接下来的一年中,如果example.com服务器发送的证书无效,用户不能忽略浏览器警告,将无法继续访问该网站。

只要浏览器曾经与服务器建立过一次安全连接,之后浏览器会强制使用HTTPS,即使链接被换成了HTTP

不足

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

参考链接

Nginx开启HSTS让浏览器强制跳转HTTPS访问

HTTP严格传输安全

Last modification:February 2nd, 2020 at 01:48 pm