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

网站安全HSTS详解原理及配置HTTP到HTTPS再到HSTS已关闭评论3231

HTTPS大家并不陌生,可以理解为更加安全HTTP,然而网站通过HTTPS提供服务也不是安全的,这时候HSTS出现了,新手站长网详解HSTS、HSTS原理、HSTS配置以及如何加入HSTS Preload List:

HSTS背景之HTTPS并不那么安全

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

HSTS让HTTPS更加安全

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

HSTS原理

HSTS的全称是HTTP Strict-Transport-Security,它是一个Web安全策略机制。文章源自新手站长-https://xinshouzhanzhang.com/hsts.html

HSTS的核心是HTTP响应头(HTTP Response Header),它告诉浏览器在接下来的一段时间,这个域名只能通过HTTPS进行访问,如果该域名在浏览器中出现不安全访问,HSTS会强制用户的访问。文章源自新手站长-https://xinshouzhanzhang.com/hsts.html

HSTS配置

新手站长网说过,HSTS的核心是HTTP响应头,HSTS Header的语法:文章源自新手站长-https://xinshouzhanzhang.com/hsts.html

Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]
  • max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒;
  • includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护;
  • preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到(关于Preload List会在本文底部继续聊一聊)。
  • 这个HSTS Header可以在服务器、程序框架、反向代理服务器都可以设置,例如在代理服务器中设置,以Nginx为例,在配置文件中加入:文章源自新手站长-https://xinshouzhanzhang.com/hsts.html

    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

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

    在服务器返回给浏览器的响应头中,增加Strict-Transport-Security这个HSTS Header,例如:文章源自新手站长-https://xinshouzhanzhang.com/hsts.html

    Strict-Transport-Security: max-age=31536000; includeSubDomains

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

    HSTS也不安全!

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

    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查询。

    【阿里云99元服务器】入口2核2G3M带宽、新老用户同享、99元/年续费到2027年

    【腾讯云特价】:2核2G3M 88元一年、2核2G4M 108元1年 366元3年、2核4G5M 166元/年 566元3年、4核8G12M 446元一年 更多配置8核16G18M和16核32G28M 点我直达 >>

    2023阿里云优惠活动:xinshouzhanzhang.com/go/aliyun

    注意:以上特价轻量服务器限制条件为“产品首单特惠”,如果你的腾讯云账号已经是老用户,建议重新注册一个腾讯云账号,如果你是新用户符合条件,那么无脑入,确实值得。

     最后更新:2018-10-12
    Apache

    Apache https301重定向跳转http规则方法教程

    https重定向301跳转到http规则及配置方法,新手站长网分享Apache Web服务器环境下的http强制跳转到http的配置方法
    网站SSL证书

    AMH配置SSL证书转HTTPS协议方法教程

    AMH云主机面板配置SSL证书,http协议转https安全协议的方法,新手站长网分享AMH面板安装SSL证书的方法: AMH安装SSL证书流程介绍 AMH面板安装SSL证书很简单,新手站长网通过安装...