HSTS 详解,让 HTTPS 更安全
随着互联网的快速发展,人们在生活中越来越离不开互联网。无论是社交、购物还是搜索,互联网都能给人带来很多的便捷。与此同时,由于用户对网络安全的不了解和一些网站、协议的安全漏洞,让很多用户的个人信息数据“裸露”在互联网中。为此谷歌在 Chrome 68 版本后,其界面将会让使用者更容易了解 HTTP 网页是不安全的,并持续推动网站预设使用 HTTPS。但 HTTP 依旧可以访问使用,为此一些网站可以设置 HSTS 策略,以此来强制浏览器使用 HTTPS 与网站通信,来保障网站更加安全。

多了 SSL 层的 HTTP 协议
在聊 HSTS 之前,先来简单说下 HTTPS。简而言之,HTTPS 就是在 HTTP 下加入了 SSL 层,从而保护了交换数据隐私和完整性,提供对网站服务器身份认证的功能,简单来说它就是安全版的 HTTP。一般来说,HTTPS 主要用途有三个:一是通过证书等信息确认网站的真实性;二是建立加密的信息通道;三是数据内容的完整性。

图中是HTTPS的握手流程,相比 HTTP,HTTPS 传输更加安全。
- 所有信息都是加密传播,黑客无法窃听。
- 具有校验机制,一旦被篡改,通信双方会立刻发现。
- 配备身份证书,防止身份被冒充。
强制 HTTPS,保障数据安全
HSTS(HTTP Strcit-Transport-Securit)即 HTTP 严格传输安全, 是一种 Web 安全策略机制,可保护网站免受协议降级攻击和 cookie 劫持、中间人攻击。它允许 Web 服务器声明浏览器(或其他符合要求的用户代理)应用使用安全的 HTTPS 连接与交互,而不是通过不安全的 HTTP 协议。


使用 HSTS 策略后,在缓存时间内,对应的域名请求都将会自动转换为安全的 HTTPS 方法。若浏览器使用 HTTP 访问时,浏览器内部会通过 307 跳转为 HTTPS 访问,并添加响头 Non-Authorizatative-Reason:HSTS。并在 200 响应头字段返回 strict-transport-security: max-age=127800(2 天-自定义)。

与此同时,若用户访问到不安全的 HTTPS 网站时,浏览器会提示用户当前访问的网站不安全且禁止用户访问。如果仅使用 HTTPS 协议,虽然它也会提醒访问的网站的安全性存在问题,但依然可以通过忽略危险进行访问。使用 HSTS 策略后,浏览器会终止任何和所有安全传输错误或警告的任何安全传输连接尝试。也就不能忽略浏览器的不安全提示,无法进行不安全的访问连接,从而进一步保证用户的数据安全。

启用 HSTS 后,使用 HTTPS 访问后会在响应头添加 HSTS 响应字段:
Strict-Transport-Security: max-age=ExpireTime [;includeSubDomains][; preload]
其中 max-age 是必选参数,可以是 ‘0’ 以上的任何值,一般设定缓存 180 天。这个变量定义HSTS 响应头在浏览器中的缓存时间。
Strict-Transport-Security: max-age=15552000
[includeSubDomains] 是可选参数,表示浏览器将此策略应用于当前域名的所有子域。
Strict-Transport-Security: max-age=15552000; includeSubDomains
[repload] 也是可选参数,表示使用 preload 预加载功能,此域名同意申请加入浏览器发发起的 Preload List。
Strict-Transport-Security: max-age=15552000; includeSubDomains; preload
HSTS 预加载,让安全无漏洞
需要注意的是,HSTS 协议必须是已经使用 HTTPS 访问并且缓存到浏览器时才会生效策略,如果用户使用的是 HTTP 协议或直接输入域名(浏览器默认使用 HTTP)的方式进行访问。如http://www.example.com , www.example.com 。虽然可以通过 301 等跳转将 HTTP 跳转到 HTTPS,但跳转使用的 HTTP 明文传输,这就给中间人攻击提供了可能。它可以在使用 HTTP 传输时对跳转信息的信息进行劫持,从而将跳转页面指向攻击者指定的页面。而且 301 跳转不会出现警示信息,客户端很容易在不知情的情况下被攻击劫持。

这时我们就可以使用 HSTS 的预加载功能,预加载可以将指定域名添加到 Preload List 名单中,添加到 Preload List 名单后,浏览器就只能通过 HTTPS 方法来进行访问,从而杜绝 HTTP 访问时被这类攻击的可能。您可以通过访问https://hstspreload.org/ 提交域名申请。但需要注意的是,添加后的域名将会硬编码到浏览器内,除非能保证域名会长久使用 HTTPS,否则请勿随意加入 Preload List。
HSTS 让网站安全等级更高一层
开启 HSTS 后,在 ssllabs 上进行测试,网站的安全等级会从 A 升级至 A+。

开启前等级为:A

开启后等级变为:A+
又拍云也提供HTTPS安全等级检测,有兴趣的小伙伴可前往:https://www.upyun.com/https 尝试下。
Chrome、Safari、Firefox 等浏览器都已经开始相继支持 HSTS,下图为各大浏览器对 HSTS 的支持情况(对于不支持的浏览器,又拍云会忽略此响应头,对用户的访问无影响):

对于那些安全性要求较高的网站,启用 HSTS 无疑是不错的选择。当用户访问网站域名时,都能够让用户使用 HTTPS 来请求网站资源,可以更加有效地保护网站和用户的数据安全,并且减少用户等待 301/302 的跳转时间,带来更好的用户体验。
推荐阅读:
HSTS 详解,让 HTTPS 更安全的更多相关文章
- [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html
Nginx安装及配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...
- 【知识详解】Https详解
Https详解 1.什么是Https Http + SSL = Https 一句话说:Https是身披SSL的Http,当使用了SSL后,Http先和SSL通信,再由SSL和TCP通信, 2.为什么需 ...
- <context:component-scan>详解 转发 https://www.cnblogs.com/fightingcoding/p/component-scan.html
<context:component-scan>详解 默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@ ...
- 减少网站跳转时间,增强网站数据安全——HSTS 详解
近年来随着 Google.Apple.百度等公司不断推动 HTTPS 普及,全网 HTTPS 已是大势所趋.目前多数网站都已经支持 HTTPS 访问,但是在由 HTTP 转向 HTTPS 路程中,不少 ...
- HSTS详解
1. 缘起:启用HTTPS也不够安全 有不少网站只通过HTTPS对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名(例如www.example.com),而不是输入完整的URL ...
- 详解全站 HTTPS 访问优化
HTTPS 协议就是 HTTP+SSL/TLS,即在 HTTP 基础上加入 SSL /TLS 层,提供了内容加密.身份认证和数据完整性3大功能,目的就是为了加密数据,用于安全的数据传输. HTTPS ...
- SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)
原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...
- Autofac框架详解 转载https://www.cnblogs.com/lenmom/p/9081658.html
一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...
- SSL协议握手工作流程详解(双向HTTPS流程)
参考学习文档:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发 ...
随机推荐
- android解析xml文件方法之一-----DOM
Hello.xml文件 <dict num="219" id="219" name="219"> <key>hell ...
- lodash中Collection部分所有方法的总结
总结一下lodash中Collection的所有的方法,方便对比记忆,也便于使用时候查找. 1. 判断是否符合条件:返回bool: a) every: 判断每一值是不是都符合条件: 通过 pr ...
- html5 兼容版本 video
<!-- first try HTML5 playback: if serving as XML, expand `controls` to `controls="controls&q ...
- spring容器和springmvc容器,以及web容器的关系
说到spring和springmvc,其实有很多人分不清他们有什么区别,认为它俩是一样的,如果你问他项目里用的什么MVC技术,他会说我们用的spring和mybatis,或者spring和hibern ...
- seek()对中文偏移测试
当前目录下创建"中文测试.txt"文件,写入: 我是大好人aaa我是大坏人bbb f = open('中文测试.txt', 'r+', encoding='utf-8') # f. ...
- linux基础-系统安装教程篇(centos6.5)
一.linux系统简介: Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户.多任务.支持多线程和多CPU的操作系统.它能运行主要的UNIX工具软件.应用程 ...
- Jenkins通过Publish over SSH插件实现远程部署
Jenkins通过Publish over SSH插件实现远程部署 步凑一.配置ssh免秘钥登录 部署详情地址:http://www.cnblogs.com/Dev0ps/p/8259099.html ...
- 可能是史上最全的机器学习和Python(包括数学)速查表
新手学习机器学习很难,就是收集资料也很费劲.所幸Robbie Allen从不同来源收集了目前最全的有关机器学习.Python和相关数学知识的速查表大全.强烈建议收藏! 机器学习有很多方面. 当我开始刷 ...
- Code Review Checklist
左按:当年需要一份详细的代码评审清单作参考,翻译了此文. 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] General Code Smoke Test 通用测试 Comm ...
- Hadoop是一种开源的适合大数据的分布式存储和处理的平台
"Hadoop能做什么?" ,概括如下: 1)搜索引擎:这也正是Doug Cutting设计Hadoop的初衷,为了针对大规模的网页快速建立索引: 2)大数据存储:利用Hadoop ...