前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >加入Prelod List使用HSTS解决全站HTTPS兼容性问题

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

作者头像
沈唁
发布2018-05-24 17:16:39
8281
发布2018-05-24 17:16:39
举报
文章被收录于专栏:沈唁志沈唁志

目前,很多站都开始实现 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 模块内插入如下配置并重启:

代码语言:javascript
复制
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 如下配置并重启:

代码语言:javascript
复制
# 先在 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 即可:

代码语言:javascript
复制
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兼容性问题

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-03-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • HSTS 协议
  • 开启 HSTS
    • 1、Nginx 服务器
      • 2、Apache 服务器
        • 3、通用方法
        • 提交 HSTS
        相关产品与服务
        轻量应用服务器
        轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门开源软件打包实现一键构建应用,提供极简上云体验。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档