HSTS--提高你的https安全性

HSTS

背景:当访问我们的域名从http变成https时,安全性能得到了极大的提升。但这也不代表绝对的安全。

HSTS简介

HTTP严格传输安全协议 (HTTP Strict Transport Security,简称:HSTS),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。

使用HSTS和不适用HSTS的区别

不适用HSTS的情况

  1. 在浏览器的地址栏输入网址时,有时我们不会输入https协议,浏览器默认使用http进行访问。
  2. TCP握手成功后返回302状态码。
  3. 由于端口号进行改变,需要重新建立连接(源IP、目的IP、源端口、目的端口,这四个有任意一个条件改变即需要重新建立连接)
  4. 进行ssl认证

出现的问题:

  • 前两步所耗费的rt是没有意义的,并且会让用户从感知上觉得网站相应慢
  • 前面没有使用https,容易出现被攻击和劫持的情况。

使用HSTS的情况

在此域名设置的有效期之内,所有的http请求,人们无感知的情况下,在浏览器内部实现307跳转,向网站发起https请求

HSTS缺陷

  1. HSTS的实现是让通过Strict-Transport-Security这个HTTP Header来告诉浏览器此域名需要使用HSTS功能,因此,第一次请求不可避免的可能需要使用http协议来访问,具体的解决办法是使用Preload来避免第一次的http请求。 可以通过此网站来查看和申请https://hstspreload.org/?domain=www.facebook.com
  2. 当你的浏览器出现缓存并且你的证书出现异常时,可能会导致你的网站无法访问。直到证书问题修复或清楚缓存。

如何使用HSTS

在response请求头中添加Strict-Transport-Security

Strict-Transport-Security: max-age=<expire-time>; includeSubDomains(可选); preload(可选,非标准)
  • 设置HSTS的有效时间
  • includeSubDomains表示是否适用于你网站的子域名
  • preload 谷歌维护着一个 HSTS 预加载服务。按照指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接到你的域名。虽然该服务是由谷歌提供的,但所有浏览器都有使用这份列表的意向(或者已经在用了)。但是,这不是 HSTS 标准的一部分,也不该被当作正式的内容。

nginx配置

可以在server块或http块中添加

示例:

add_header  strict-transport-security max-age=86400;

可在浏览器中查看相应头信息

参考资料:

https://segmentfault.com/a/1190000023333235

https://www.upyun.com/tech/article/242/HSTS.html

posted @ 2020-07-23 00:17  better_feng  阅读(387)  评论(0编辑  收藏  举报