HSTS详解原理及配置从HTTP到HTTPS再到HSTS

admin12个月前笔记117

image.png

HTTPS大家并不陌生,可以理解为更加安全HTTP,然而网站通过HTTPS提供服务也不是安全的,这时候HSTS出现了。

HSTS背景之HTTPS并不那么安全

最初网站是通过HTTP协议提供服务,安全起见,网站升级为HTTPS协议,可是当用户在浏览器中输入网址时,浏览器会网站发起一次HTTP请求,这是浏览器获取到一个重定向到HTTPS的请求,然后再使用HTTPS协议通信。注意,问题来了,不是已经升级为更加安全的HTTPS了吗?这个操作,不是又使用了一次HTTP么?是的,当用户直接输入网址时(不带https://),由于在建立起HTTPS连接之前存在一次明文的HTTP请求和重定向,这个过程很容易被攻击者利用,攻击者可以以中间人的方式劫持这次请求,从而进行后续的攻击,例如窃听数据,篡改请求和响应,跳转到钓鱼网站等。

HSTS让HTTPS更加安全

我们如何避免这次明文的HTTP请求和重定向呢?我们希望浏览器能够聪明一点,当用户输入网址时(不带https://)浏览器能够自动将其转换成HTTPS请求,从而绕过明文的HTTP请求和重定向,那么,浏览器怎么能做到呢?浏览器怎么知道这个网站是使用HTTPS协议呢?ok,HSTS粉墨登场!HSTS可以告诉浏览器这个网站是否是使用的HTTPS。

HSTS原理

HSTS的全称是HTTP Strict-Transport-Security,它是一个Web安全策略机制。

HSTS的核心是HTTP响应头(HTTP Response Header),它告诉浏览器在接下来的一段时间,这个域名只能通过HTTPS进行访问,如果该域名在浏览器中出现不安全访问,HSTS会强制用户的访问。

HSTS配置

新手站长网说过,HSTS的核心是HTTP响应头,HSTS Header的语法:


  • max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒;

  • includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护;

  • preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到(关于Preload List会在本文底部继续聊一聊)。

  • 这个HSTS Header可以在服务器、程序框架、反向代理服务器都可以设置,例如在代理服务器中设置,以Nginx为例,在配置文件中加入:

    注意:设置有效期为31536000秒(1年),一定要小心了,如果网站SSL证书出现问题,那么用户在一年的时间里都没法正常访问你的网站了,当然,除非用户清除了浏览器缓存。

    在服务器返回给浏览器的响应头中,增加Strict-Transport-Security这个HSTS Header,例如:

    上述例子中我们将max-age设置为31536000秒(1年),这是告诉浏览器,在接下来的1年时间中,当前域名以及其子域名的后续通信需要强制使用HTTPS,直至过期(1年后)。随着用户和网站之间的交互,这个有效期是动态刷新的,所以不用担心过期的问题。

    HSTS也不安全!

    纳尼?HSTS也不安全?是的,HSTS有一个弱点,假设浏览器中没有该域名的HSTS信息时,用户第一次访问该网站时,依然需要使用明文的HTTP请求和重定向,这又给攻击者留下了可乘之机,那怎么办?HSTS也不是傻子,新手站长网来聊一聊Preload List。

    HSTS的Preload List

    HSTS也不是傻子,HSTS的解决方法是在浏览器中内置一个列表,只要这个域名在浏览器内置的列表中,浏览器就要对这个域名使用HTTPS连接。这个列表就是Preload List,Preload List是由Google Chromium维护的,FireFox、Safari、IE等主流浏览器均在这个列表。

    如何加入HSTS Preload List?

    加入HSTS Preload List的官网条件:

  • 具备一个有效的证书

  • 在同一台主机上提供重定向响应,以及接收重定向过来的HTTPS请求

  • 所有子域名均使用HTTPS

  • 在根域名的HTTP响应头中,加入HSTS Header,并满足下列条件:

    过期时间最短不得少于18周(10886400秒)
    必须包含includeSubDomains参数
    必须包含preload参数

  • 请按照上述官方罗列的条件,仔细检查好自己的网站,符合规定后,在https://hstspreload.org上提交申请即可。符合条件的情况下,加入Preload List大约需要7-15天,也可能更快。

    怎么查询域名是否加入了HSTS Preload List?

    查询域名是否加入了HSTS Preload List中有两种方法,即通过官网https://hstspreload.org查询,或者通过Chrome谷歌浏览器查询。

    方法一:通过官网查询域名是否加入到HSTS Preload List,地址:https://hstspreload.org
    方法二:通过Chrome查询,在Chrome地址栏中输入chrome://net-internals/#hsts查询。


相关文章

教你如何更改Linux控制台上的字体

教你如何更改Linux控制台上的字体

我尝试尽可能的保持心灵祥和,然而总有一些事情让我意难平,比如控制台字体太小了。记住我的话,朋友,有一天你的眼睛会退化,无法再看清你编码时用的那些细小字体,到那时你就后悔莫及了。幸好,Linux 死忠们...

Shell脚本逐行处理文本文件技巧

经常会对文体文件进行逐行处理,在Shell里面如何获取每行数据,然后处理该行数据,最后读取下一行数据,循环处理.有多种解决方法如下:1.通过read命令完成.read 命令从标准输入中读取一...

你知道是哪个是常见的约束中MySql不支持的吗?

数据库中的约束,顾名思义即是对插入数据库中的数据进行了一定的限定,这样做的目的是为了保证数据的完整性和有效性。这样会大幅度地提升数据库中数据的质量,节省数据库空间和提高运行效率。那么,常见的数据库约束...

linux限定用户或组对磁盘空间的使用

实验环境环境:centos7.3 ,一块磁盘sdb分一个分区sdb1。安装磁盘配额支持软件yum install quota制作文件系统,并以支持配额功能的方式挂载文件系...

如何使用Linux匿名上网-四大法宝

如何使用Linux匿名上网-四大法宝

一些人可能会认为这是“锡箔”思维方式,但是正如全球各地的许多情报组织的信息反馈中看到的,政府监视已从被认为一种疯狂的阴谋论变成了几乎赤裸裸的公然威胁。关注隐私、希望尽可能不被人监视的那些人会发现,如果...

上网强跳广告/页面劫持:其实是DNS被“污染”

上网强跳广告/页面劫持:其实是DNS被“污染”

自从进入网络时代,大家的生活也愈加多姿多彩起来,但也多出了很多烦恼。例如,信息海洋中时不时出现的大群垃圾,以及深渊,就令人防不胜防。这里说的正是上网过程中遇到莫名其妙的网页跳转,好端端的一个网页,突然...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。