使用HSTS让浏览器强制跳转HTTPS访问

2017年10月20日15:09:12 6 1,851 views
本文最后更新于2017年10月22日,已超过 1 年没有更新,如果文章内容或图片资源失效,请留言反馈,我们会及时处理,谢谢!

在网站全站HTTPS后,如果用户手动敲入网站的HTTP地址,或者从其它地方点击了网站的HTTP链接,通常依赖于服务端301/302跳转才能使用HTTPS服务。而第一次的HTTP请求就有可能被劫持,导致请求无法到达服务器,从而构成HTTPS降级劫持。这个问题目前可以通过HSTS(HTTP Strict Transport Security,RFC6797)来解决。

HSTS简介

HSTS(HTTP Strict Transport Security)是国际互联网工程组织IETF发布的一种互联网安全策略机制。采用HSTS策略的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址,以减少会话劫持风险。

HSTS响应头格式

Strict-Transport-Security: max-age=expireTime [; includeSubDomains] [; preload]

  • max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过HTTPS协议来访问。也就是对于这个网站的HTTP地址,浏览器需要先在本地替换为HTTPS之后再发送请求。
  • includeSubDomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过HTTPS协议来访问。
  • preload,可选参数,一个浏览器内置的使用HTTPS的域名列表。

 

 

支持HSTS浏览器

目前主流浏览器都已经支持HSTS特性,具体可参考下面列表:

  • Google Chrome 4及以上版本
  • Firefox 4及以上版本
  • Opera 12及以上版本
  • Safari从OS X Mavericks起
  • Internet Explorer及以上版本

Apache上启用HSTS

# 开启HSTS需要启用headers模块
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so

#将所有访问者重定向到HTTPS,解决HSTS首次访问问题。
RedirectPermanent / https://www.cloudcared.cn/

<VirtualHost 0.0.0.0:443>
# 启用HTTP严格传输安全
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

重启apache服务

 

Nginx上启用HSTS

此处为隐藏的内容!
发表评论并刷新,才能查看

结果测试

设置完成了后,可以用curl命令验证下是否设置成功。如果出来的结果中含有Strict-Transport-Security的字段,那么说明设置成功了。

  • 微信小程序
  • 关注微信小程序
  • weinxin
  • 微信公众号
  • 关注微信公众号
  • weinxin
Honest1y

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:6   其中:访客  5   博主  1

    • avatar On the way°  2

      66666 可以

      • avatar 腾讯视频 4

        666 可以啊

          • avatar 起风 博主

            @腾讯视频 请使用真实QQ昵称留言 :eek:

          • avatar BEGINNING 0

            66666666666

            • avatar zhattyt 1

              66666666666真的可以

              • avatar 请输入您的QQ号 1

                66666666666 :smile: