HSTS 详解,让 HTTPS 更安全

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

多了 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 策略后,浏览器会终止任何和全部安全传输错误或警告的任何安全传输链接尝试。也就不能忽略浏览器的不安全提示,没法进行不安全的访问链接,从而进一步保证用户的数据安全。cookie

image

启用 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)的方式进行访问。如www.example.com , www.example.com 。虽然能够经过 301 等跳转将 HTTP 跳转到 HTTPS,但跳转使用的 HTTP 明文传输,这就给中间人攻击提供了可能。它能够在使用 HTTP 传输时对跳转信息的信息进行劫持,从而将跳转页面指向攻击者指定的页面。并且 301 跳转不会出现警示信息,客户端很容易在不知情的状况下被攻击劫持。

image

这时咱们就可使用 HSTS 的预加载功能,预加载能够将指定域名添加到 Preload List 名单中,添加到 Preload List 名单后,浏览器就只能经过 HTTPS 方法来进行访问,从而杜绝 HTTP 访问时被这类攻击的可能。您能够经过访问hstspreload.org/ 提交域名申请。但须要注意的是,添加后的域名将会硬编码到浏览器内,除非能保证域名会长久使用 HTTPS,不然请勿随意加入 Preload List。

HSTS 让网站安全等级更高一层

开启 HSTS 后,在 ssllabs 上进行测试,网站的安全等级会从 A 升级至 A+。

开启前等级为:A

开启后等级变为:A+

又拍云也提供HTTPS安全等级检测,有兴趣的小伙伴可前往:www.upyun.com/https 尝试下。

Chrome、Safari、Firefox 等浏览器都已经开始相继支持 HSTS,下图为各大浏览器对 HSTS 的支持状况(对于不支持的浏览器,又拍云会忽略此响应头,对用户的访问无影响):

对于那些安全性要求较高的网站,启用 HSTS 无疑是不错的选择。当用户访问网站域名时,都可以让用户使用 HTTPS 来请求网站资源,能够更加有效地保护网站和用户的数据安全,而且减小用户等待 301/302 的跳转时间,带来更好的用户体验。

推荐阅读:

当 “HTTP” 先生赶上“S”小姐

了解 HTTPS,读这篇文章就够了​

相关文章
相关标签/搜索