加入Prelod List使用HSTS解决全站HTTPS兼容性问题

目前,很多站都开始实现 HTTPS 了,本站也开启了 HTTPS,而且还开启强制 HTTPS 机制,对于网站的 HTTP 请求全部 301 跳转到 HTTP,从而实现全站 HTTPS,一切为了安全!

HSTS 协议

HSTS 的全称是 HTTP Strict-Transport-Security,它是一个 Web 安全策略机制(web security policy mechanism),是国际互联网工程组织 IETE 正在推行一种新的 Web 安全协议,作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。

HSTS 最为核心的是一个 HTTP 响应头(HTTP Response Header)。正是它可以让浏览器得知,在接下来的一段时间内,当前域名只能通过 HTTPS 进行访问,并且在浏览器发现当前连接不安全的情况下,强制拒绝用户的后续访问要求。

HSTS 主要目的是为了解决 HTTPS 网站首次请求时使用的是未加密的 HTTP 协议,也就说用户一般访问我们的网站都是直接在浏览器输入域名,然后我们的服务器检测到是 HTTP 请求,就 301 跳转到 HTTPS 页面,这样有一个问题,因为 HTTP 是不安全的,这个重定向就有可能被攻击者吞掉,然后攻击者一方面冒充服务器,使用 HTTP 与浏览器进行通讯,另一方面冒充浏览器,与服务器使用 HTTPS 建立连接,这就是所谓的 SSLstrip 攻击。

所以 HSTS 还有另外一层好处:增强网站 HTTPS 的兼容性。基本上网站 HTTPS 都是采用 301 强制性跳转,而且还会区分下低版本 IE、不支持 HTTPS 的搜索引擎来忽略 301 跳转,很明显这样做无法照顾到所有情况,采用 HSTS 后,访问 HTTP,支持这个协议的浏览器会自动跳转到 HTTPS 页面,返回码为 307:

返回码为 307

开启 HSTS

开启 HSTS 很简单,只要在我们网站的响应头里面新增 HSTS 即可,下面简单说下

1、Nginx 服务器

只需要在站点 server 模块内插入如下配置并重启:

server {
    listen 443 ssl http2; 
    server_name qq52o.me www.qq52o.me;
    add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
    # 以下略...

2、Apache 服务器

Apache 如下配置并重启:

# 先在 Apache 加载 mod_header 库,一般位于 httpd.conf 文件,自行搜索 mod_headers 并取消注释
LoadModule headers_module modules/mod_headers.so
 
#然后在站点 VirtualHost 里面插入 HSTS 响应头信息,比如:
    Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

3、通用方法

如果你用的虚拟主机,或者不会折腾 WEB 软件,那么可以采用更简单的通用方法。原理很简单,通过代码来新增响应头即可,这里只分享一下 php 的做法,其他语言自行参考:

将如下代码插入到网站根目录的 index.php 即可:

header("Strict-Transport-Security: max-age=63072000; includeSubdomains; preload");

提交 HSTS

将支持 HSTS 的网站全部加入一个 Preload 的清单,支持 HSTS 协议的浏览器请求网站前会查询当前网站是否在清单中,如果是那么直接转换为 HTTPS 请求!从而解决前半程为 HTTP 的问题,如果我们的网站启用了 HSTS,还得将网站提交到这个 Preload 清单才行了。

提交地址:https://hstspreload.org/  (请自备小飞机)

提交直到批准,我们的网站必须强制 301 跳转到 HTTPS,否则无法通过,完成审核后再取消 301 即可。

提交前注意几点:

  • 需在全站启用 HTTPS(包括子域名),同时重定向所有 HTTP 流量至 HTTPS
  • max-age必须至少 31536000 秒(1 年)
  • includeSubdomainspreload
  • 不能反悔的哦,撤销比较麻烦,不过也有人成功撤销了

如果主域名旗下有其它子域名没有完成 HTTPS 一定不要做,否则提交后默认主域名下的任何链接都会使用 HTTPS 协议访问,本站昨天去查看也已经通过了。

HSTS Preload List 提交成功

沈唁志|一个PHPer的成长之路! 原创文章采用CC BY-NC-SA 4.0协议进行许可,转载请注明:转载自:加入Prelod List使用HSTS解决全站HTTPS兼容性问题

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏.NET后端开发

ADO.NET入门教程(五) 细说数据库连接池

题外话 通过前几章的学习,不知道大家对ADO.NET有一定的了解了没有。撇开文章质量不讲,必须肯定的是,我是用心去写每一篇文章的。无论是是在排版上,还是在内容选...

4099
来自专栏程序猿

第三节:如何使用Burp Suite代理

Burp Proxy 是Burp Suite以用户驱动测试流程功能的核心,通过代理模式,可以让我们拦截、查看、修改所有在客户端和服务端之间传输的...

43212
来自专栏小狼的世界

Mac下使用XLD转换无损音乐Ape

最近想要给音乐库增加一些音乐,下载了一些Ape格式的无损音乐,但是无法直接导入到iTunes中,必须经过其他工具转换成苹果的无损格式,XLD就是这样一款工具。X...

1781
来自专栏腾讯DevOps

5分钟入门git模式开发

目前项目已逐步从svn移步到git开发模式,其中也针对git统一协议了适合git的开发规范, 最重要一点就是分支模型的,为了规范开发,不直接在主干上修改代码,一...

7.5K3
来自专栏上善若水

S007SELinux(SEAndroid)是怎么解决安全问题的

上一小结,咱们大概知道,SELinux是个什么。这一节想弄明白SELinux是怎么解决问题的?

791
来自专栏跟我一起学Docker

第一章 Docker环境搭建

学习Docker,免不了的就是搭建环境了。搭建环境是一个复杂的工程,而且还是相当费时间的,不过话又说回来了,磨刀不误砍柴工嘛,光有理论是不够的,...

7147
来自专栏流浪猫的golang

linux 部署golang 项目(直接部署和基于nginx部署)

linux 上安装golang 项目的方式按照官网的 https://golang.org/doc/install#install(要梯子)的方式,安装go运行...

2012
来自专栏安智客

GP规范中定义的四种SE访问控制架构

GP规范给人的感觉好像有点晦涩难懂,由于是规范,所以比较抽象,而且GP这个组织的专家们来自世界各地,大家都用英语文档交流,所以不同的文档风格不同,难免大家阅读起...

1632
来自专栏小狼的世界

让Mac风扇面对PD不再疯狂

对于所有喜欢Mac操作系统的用户来说,如果办公环境必须使用Windows及Windows程序,那一定会非常崩溃,因为你很可能使用了Parallels Deskt...

1892
来自专栏Ryan Miao

Hexo next博客添加折叠块功能添加折叠代码块

前言 有大段的东西想要放上去,但又不想占据大量的位置。折叠是最好的选择。下面在Hexo的主题上定制添加折叠功能。 本文基于Hexo Next的主题修改。其他主题...

5178

扫码关注云+社区

领取腾讯云代金券