随着互联网的快速发展,人们在生活中越来越离不开互联网。无论是社交、购物还是搜索,互联网都能给人带来很多的便捷。与此同时,由于用户对网络安全的不了解和一些网站、协议的安全漏洞,让很多用户的个人信息数据“裸露”在互联网中。为此谷歌在 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 的跳转时间,带来更好的用户体验。

推荐阅读:

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

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

HSTS 详解,让 HTTPS 更安全的更多相关文章

  1. [转帖]Nginx安装及配置详解 From https://www.cnblogs.com/zhouxinfei/p/7862285.html

    Nginx安装及配置详解   nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP ...

  2. 【知识详解】Https详解

    Https详解 1.什么是Https Http + SSL = Https 一句话说:Https是身披SSL的Http,当使用了SSL后,Http先和SSL通信,再由SSL和TCP通信, 2.为什么需 ...

  3. <context:component-scan>详解 转发 https://www.cnblogs.com/fightingcoding/p/component-scan.html

    <context:component-scan>详解   默认情况下,<context:component-scan>查找使用构造型(stereotype)注解所标注的类,如@ ...

  4. 减少网站跳转时间,增强网站数据安全——HSTS 详解

    近年来随着 Google.Apple.百度等公司不断推动 HTTPS 普及,全网 HTTPS 已是大势所趋.目前多数网站都已经支持 HTTPS 访问,但是在由 HTTP 转向 HTTPS 路程中,不少 ...

  5. HSTS详解

    1. 缘起:启用HTTPS也不够安全 有不少网站只通过HTTPS对外提供服务,但用户在访问某个网站的时候,在浏览器里却往往直接输入网站域名(例如www.example.com),而不是输入完整的URL ...

  6. 详解全站 HTTPS 访问优化

    HTTPS 协议就是 HTTP+SSL/TLS,即在 HTTP 基础上加入 SSL /TLS 层,提供了内容加密.身份认证和数据完整性3大功能,目的就是为了加密数据,用于安全的数据传输. HTTPS ...

  7. SSL协议(HTTPS) 握手、工作流程详解(双向HTTPS流程)

    原文地址:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段:1)客户端向服务器发送一个 ...

  8. Autofac框架详解 转载https://www.cnblogs.com/lenmom/p/9081658.html

    一.组件 创建出来的对象需要从组件中来获取,组件的创建有如下4种(延续第一篇的Demo,仅仅变动所贴出的代码)方式: 1.类型创建RegisterType AutoFac能够通过反射检查一个类型,选择 ...

  9. SSL协议握手工作流程详解(双向HTTPS流程)

    参考学习文档:http://www.cnblogs.com/jifeng/archive/2010/11/30/1891779.html SSL协议的工作流程: 服务器认证阶段: 1)客户端向服务器发 ...

随机推荐

  1. Hadoop基础知识串烧

     YARN资源调度: 三种 FIFO 大任务独占 一堆小任务独占 capacity 弹性分配 :计算任务较少时候可以利用全部的计算资源,当队列的任务多的时候会按照比例进行资源平衡. 容量保证:保证队 ...

  2. js中window对象的opener属性的一个坑

    2018-05-08 17:48:33 今天我编写代码碰到了一个让我纠结了很久的坑,特别想在此说一下,让其他人避免我踏过的这个坑. 这个坑就是:在我自己写的子窗口中用opener属性却获取不到父窗口的 ...

  3. RocketMQ源码 — 八、 RocketMQ消息重试

    RocketMQ的消息重试包含了producer发送消息的重试和consumer消息消费的重试. producer发送消息重试 producer在发送消息的时候如果发送失败了,RocketMQ会自动重 ...

  4. 让 Homebrew 走代理更新 + brew 管理 node 版本

    0.前言 环境:MacOS 背景:整理下今天所做的配置. 1. 让 Homebrew 走代理更新 brew update 就卡住了,即使开了 shadowsocks 也不行.因为 shadowsock ...

  5. 学习ASP.NET Core Razor 编程系列九——增加查询功能

    学习ASP.NET Core Razor 编程系列目录 学习ASP.NET Core Razor 编程系列一 学习ASP.NET Core Razor 编程系列二——添加一个实体 学习ASP.NET ...

  6. 关于css盒模型

    在css中,width和height指的是内容区域的宽度和高度.增加内边距,边框和外边距不会影响内容区域的尺寸,但是会增加元素框的总尺寸.假设框的每个边上有10个像素的外边距和5像素的内边距,如果希望 ...

  7. gawk编程语言

    gawk是一门功能丰富的编程语言,你可以通过它所提供的各种特性来编写好几程序处理数据. 22.1 使用变量 gawk编程语言支持两种不同类型的变量: 内建变量和自定义变量 22.1.1 内建变量 ga ...

  8. Map的四种遍历

    //Map的四种遍历方法 public static void main(String[] args) { Map<String, String> map = new HashMap< ...

  9. Masonry 抗压缩 抗拉伸

    约束优先级: 在Autolayout中每个约束都有一个优先级, 优先级的范围是1 ~ 1000.创建一个约束,默认的优先级是最高的1000 Content Hugging Priority: 该优先级 ...

  10. VMWare的网络

    1.VMWare的网络连接方式区别 连接方式 宿主机和虚拟机 虚拟机对外网的访问 外网对虚拟机的访问 Host-Only 可以相互访问 不能直接访问 不能直接访问 NAT 虚拟机可以访问宿主机 可以( ...