关于HSTS安全协议的全面详细解析

2023-05-15 11:38:08
摘要:HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP。

HTTP 严格传输安全(HSTS)是一种安全功能,web 服务器通过它来告诉浏览器仅用 HTTPS 来与之通讯,而不是使用 HTTP。HSTS 是网站从 HTTP 到 HTTPS 中网站性能及安全优化非常重要的一个步骤,能够解决和兼容 HTTPS 中的一些不足之处。HSTS 在全站 HTTPS 下有一个较大的正向作用,推荐使用。

一、HSTS 是什么?

国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。该协议将帮助网站采用全局加密,用户看到的就是该网站的安全版本。

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

HTTPS 最典型的用户访问过程

通常我们访问一个网站时,一般在浏览器中只输入网站地址,而不输入协议名。比如访问合肥网站建设公司梦扬科技网站,如果直接输入网址 https://e926.com 或 e926.com 时,这就给了中间人攻击的一个机会,重定向会可能会被破坏,从而定向到一个恶意站点而不是应该访问的加密页面。HTTP 严格传输安全(HSTS)功能使 Web 服务器告知浏览器绝不使用 HTTP 访问,在浏览器端自动将所有到该站点的 HTTP 访问替换为 HTTPS 访问。

即使你打开网站看到的是全站 HTTPS 状态 ,你是因为我们在服务器上做过301/302 跳转到 https://www.xiaoercms.com这个地址的, HTTPS 网站的做法是对用户的 HTTP 访问做 302 跳转到 HTTPS,并重新建连。

那么问题也就来了,在这个跳转的过程中就有两个不足之处:

整个通信过程中的前两个 RT 是没有意义的;
使用了不安全的 HTTP 通信,万一你是在提交敏感数据呢。
HSTS 的出现就是解决这些问题的。HSTS 的作用除了节省 HTTPS 通信 RT 和强制使用 HTTPS ,还包括:

阻止基于SSLStrip 的中间人攻击;
万一证书有错误,则显示错误,用户不能回避警告。
HSTS 的工作机制可描述如下:服务器端配置支持 HSTS 后,会在给浏览器返回的 HTTP 首部中携带 HSTS 字段。浏览器获取到该信息后,会将所有 HTTP 访问请求在内部做307跳转到 HTTPS,而无需任何网络过程,从而提高了兼容性,这个机制对于不支持 HTTPS 的搜索引擎来说也是非常友好的做法。

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

HSTS preload list 是什么?

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

加入 HSTS preload list 所需条件:

有效的证书;
将所有 HTTP 流量重定向到 HTTPS;
确保所有子域名启用 HTTPS,特别是 www 子域名。
同时输出的 HSTS 响应头部需要满足以下条件:

max-age 至少需要 18 周,10886400 秒
必须指定 includeSubdomains 参数
必须支持 preload 参数
一个典型满足 HSTS preload list 的响应头部为:Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

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

HSTS 的优势及必要性

简单说就是强制客户端使用 HTTPS 访问页面。有效避免了中间人对 80 端口的劫持。但是这里存在一个问题:如果用户在劫持状态,并且没有访问过源服务器,那么源服务器是没有办法给客户端种下 Strict-Transport-Security 响应头的(都被中间人挡下来了)。

启用 HSTS 不仅仅可以有效防范中间人攻击,同时也为浏览器节省来一次 302/301 的跳转请求,收益还是很高的。我们的很多页面,难以避免地出现 http 的链接,比如 help 中的链接、运营填写的链接等,这些链接的请求都会经历一次 302,对于用户也是一样,收藏夹中的链接保存的可能也是 http 的。

307 状态码

在 GET、HEAD 这些幂等的请求方式上,302、303、307 没啥区别,而对于 POST 就不同了,大部分浏览器 都会 302 会将 POST 请求转为 GET,而 303 是规范强制规定将 POST 转为 GET 请求,请求地址为 header 头中的 Location,307 则不一样,规范要求浏览器继续向 Location 的地址 POST 内容。

而在 HSTS 中,307 可以被缓存,缓存时间根据 max-age 而定,一般建议缓存 1 年甚至更长。

HSTS 存在的坑

纯 IP 的请求,HSTS 没法处理,比如 http://2.2.2.2 , 即便响应头中设置了 STS,浏览器也不会理会(未测试)
HSTS 只能在 80 和 443 端口之间切换,如果服务是 8080 端口,即便设置了 STS,也无效(未测试)
如果浏览器证书错误,一般情况会提醒存在安全风险,然是依然给一个链接进入目标页,而 HSTS 则没有目标页入口,所以一旦证书配置错误,就是很大的故障了
如果服务器的 HTTPS 没有配置好就开启了 STS 的响应头,并且还设置了很长的过期时间,那么在你服务器 HTTPS 配置好之前,用户都是没办法连接到你的服务器的,除非 max-age 过期了。
HSTS 能让你的网站在 ssllab 上到 A+
写在最后:HSTS 在全站 HTTPS 下有一个较大的正向作用,推荐使用。

你觉得这篇文章怎么样?

54 0

我们立足于合肥面向安徽乃至全国全球市场,我们拥有一支经验丰富、创意独到、团结协作的专业技术团队。我们立志把最好的技术通过最有效、最简单的方式提供给客户,为客户提供最佳的解决方案,我们将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,帮助客户在新经济时代下,把握商机和发展空间,并获得绝对的竞争力!我们专注于高端网站定制、系统开发、商城开发、外贸网站建设、公众号开发、小程序开发、网站优化推广、安全运维等技术领域。是高端定制网站领域著名服务商!

扫描二维码与小二CMS创始人沟通

7*24小时为您服务

小二CMS专注于高端网站定制、系统开发、商城开发、外贸网站建设、公众号开发、小程序开发、网站优化推广、安全运维等技术领域。是高端定制网站领域著名服务商!

本文标题:关于HSTS安全协议的全面详细解析
免责声明:文章《关于HSTS安全协议的全面详细解析》来至网络,文章表达观点不代表本站观点,文章版权属于原作者所有,若有侵权,请联系本站站长处理!
关于我们

建站190专注于高端网站建设服务及定制,拥有丰富的企业网站建站经验。 近年来制作并完成了许多网站建设案例,企业品牌官网、营销型网站的建设、B2C网上商城系统开发、行业门户网站等平台开发,我们还提供了网站的策划、设计、开发、布署、安全等一站式专业的网站建设解决方案。建站190致力于研发国内最专业、功能最强大,扩展性能最自由灵活的高端行业通用的网站系统。我们做的不仅仅是网站系统,更多的是成就您的成功!

我们的优势

十三年建站服务经验
服务3000家企业
资深行业分析策划
前沿视觉设计、研发能力
前端代码深度符合SEO优化
千家成功案例

独家源码出售
具有完备的项目管理
完善的售后服务体系
深厚的网络运营经验
时刻新技术领先研发能力
方便二次开发

我们的不同

我们是一个年轻且富有激情的团队,我们沉迷于代码并陶醉在设计之中。我们非设计,不生活;无兄弟,不编程!可年轻并不意味着没有经验。团队成员均来自各顶尖设计公司及软件公司,我们对网站设计及开发驾轻就熟,有着数百个成功案例。我们坚信用心服务,用实力说话!我们的使命:通过我们的努力,让技术改变命运!我们的宗旨:客户第一,品质至上!我们的信念:唯有客户的成功,才是我们的成功!

不忘初心,方得始终
中高端网站定制开发服务商
与我们取得联系

好作品自己会说话,

我们敬畏您给予的点滴信任 !

期待携手合作,请立即咨询我们:
QQ咨询
微信咨询
我们用心,期待您成为我们的客户
联系QQ客服

QQ扫码联系客服

联系微信客服

微信扫码联系客服

微信号:
添加微信好友, 详细咨询相关信息。

复制并跳转微信
19810950281