解决缺陷,让HSTS变得完美

作者:王继波
野狗科技运维总监,曾在360、TP-Link从事网络运维相关工作,在网站性能优化、网络协议研究上经验丰富。
野狗官博:https://blog.wilddog.com/
野狗官网:https://www.wilddog.com/
公众订阅号:wilddogbaas

图片描述

HSTS是HTTPS性能和安全优化中最重要的一环,能够给HTTPS带来巨大好处,但也存在一个小缺陷。本篇文章会介绍HSTS的工作原理及如何通过HSTS preload list解决HSTS的小缺陷。

HSTS是什么?

HSTS是HTTP Strict Transport Security的缩写,即:“HTTP严格传输安全”。在介绍HSTS之前,我们先来看HTTPS最典型的用户访问过程:通常我们访问一个网站时,只在浏览器中输入网站地址,而不输入协议名。比如访问野狗的官网,我们最常使用www.wilddog.com,即使该网站是全站HTTPS,我们也很少使用https://www.wilddog.com这样的方式。 HTTPS网站的做法是对用户的HTTP访问做302跳转到HTTPS,并重新建连。

图片 1

但是这个过程明显存在两个不足之处:

  • 整个通信过程中的前两个RT是没有意义的;

  • 使用了不安全的HTTP通信,万一你是在提交敏感数据呢。

HSTS的出现就是解决这些问题的。HSTS的作用除了节省HTTPS通信RT和强制使用HTTPS,还包括:

  • 阻止基于SSLStrip的中间人攻击;

  • 万一证书有错误,则显示错误,用户不能回避警告。

HSTS的具体工作机制可描述如下:服务器端配置支持HSTS后,会在给浏览器返回的HTTP首部中携带HSTS字段。浏览器获取到该信息后,会将所有HTTP访问请求在内部做307跳转到HTTPS。而无需任何网络过程。

目前大部分浏览器对HSTS的支持已经相当完美,具体各浏览器和版本的支持情况可以在http://caniuse.com/#search=HSTS上查看。 但是HSTS是有缺陷的,第一次访问网站的客户端,HSTS并不工作。 要解决这个问题,就要了解我们下面要讲解的HSTS preload list。

HSTS preload list

HSTS preload list是什么?

HSTS preload list是Chrome浏览器中的HSTS预载入列表,在该列表中的网站,使用Chrome浏览器访问时,会自动转换成HTTPS。Firefox、Safari、Edge浏览器也在采用这个列表。

如何加入HSTS preload list?

加入HSTS preload list不但不麻烦,而且Chrome也鼓励HTTPS网站能够主动加入。申请的方法和需要满足的条件在https://hstspreload.appspot.com网站上都有具体说明。

我将加入HSTS preload list的条件摘录如下:

  • 有效的证书(如果使用SHA-1证书,必须是2016年前就会过期的);

  • 将所有HTTP流量重定向到HTTPS;

  • 确保所有子域名启用HTTPS,特别是www子域名

同时输出的HSTS响应头部需要满足以下条件:

  • max-age至少需要18周,10886400秒

  • 必须指定includeSubdomains参数

  • 必须支持preload参数

所以,一个典型满足HSTS preload list的响应头部为:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains;preload";

从申请到审核通过,时间在几天到几周不等。野狗的域名wilddog.com申请总共耗时3天。 申请后,你可以在https://hstspreload.appspot.com网站中查询最新的状态, 也可以在Chrome浏览器的地址框中输入“chrome://net-internals/#hsts”查看。下图是对wilddog.com域名查询的输出结果。

图片描述
图片描述

值得一提的是,从审核通过到正式加入到Chrome的stable release版本中还需要一段时间,因为要经过canary、dev、beta以及stable progression。


野狗科技官方专栏
野狗丨安全可靠的实时通信云 野狗为开发者提供实时通信服务。可应用于IM聊天、在线协作、实时游戏、实时...

野狗|安全可靠的实时通信云

2.3k 声望
116 粉丝
0 条评论
推荐阅读
轻松给小程序注入实时体验 | 野狗 SDK (微信小程序版) 正式发布
如果你的应用场景需要实时性,那么野狗能提供毫秒级的实时通信(例如 QQ 和微信这类及时通讯应用,当然这只是一个方面)和数据分发功能(类似于股票行情信息的实时推送)。

野狗阅读 6.7k评论 1

Serverless部署应用并使用Cloudflare加速和支持HTTPS
Serverless 是一种云计算模型,它使开发人员能够构建和运行应用程序,而无需关心底层的服务器基础设施。在传统的应用程序开发中,开发人员需要管理服务器的配置、扩展和维护等任务。而在 Serverless 模型中,这些...

MartinDai2阅读 781

「Go 框架」bind 函数:gin 框架中是如何绑定请求数据的?
在gin框架中,我们知道用bind函数(或bindXXX函数)能够将请求体中的参数绑定到对应的结构体上。同时,你也会发现在gin中有很多bind或bindXXX函数,比如ShouldBind、ShouldBindQuery、ShouldBindHeader、ShouldBi...

Go学堂1阅读 1.3k

封面图
Tomcat处理http请求之源码分析 | 京东云技术团队
在上面的代码中,socket = serverSocketFactory.acceptSocket(serverSocket);与客户端建立连接,将连接的socket交给processSocket(socket)来处理。在processSocket中,对socket进行包装一下交给线程池来处理:

京东云开发者2阅读 171

封面图
EventSource 引发的一系列事件
大家好,我是江辰,最近小小的实现了下 chatGPT 的问答式回复,调研了前端如何实现这种问答式请求,有几种方案,Http、EventSource、WebSocket,三种实现方案各有优缺点,Http 和 WebSocket ,想必大家耳闻能详,...

江辰阅读 1.2k

封面图
【开源之夏 2023】欢迎报名 MOSN 社区项目!
开源之夏是由“开源软件供应链点亮计划”发起并长期支持的一项暑期开源活动,旨在鼓励在校学生积极参与开源软件的开发维护,促进优秀开源软件社区的蓬勃发展,培养和发掘更多优秀的开发者。

SOFAStack阅读 1k

封面图
HDC技术分论坛:HarmonyOS新一代UI框架的全面解读
在Harmony 3.0.0开发者预览版中,包含了新一代的声明式UI框架ArkUI 3.0、多语言跨平台编译器ArkCompiler 3.0、跨端开发工具DevEco Studio3.0,以及基于TS/JS语言的API 7,全面提升开发者体验。

HarmonyOS开发者阅读 957

野狗|安全可靠的实时通信云

2.3k 声望
116 粉丝
宣传栏