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

2,391 views次阅读
10条评论

在网站全站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/

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

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

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

重启apache服务

 

Nginx上启用HSTS

 此处含有隐藏内容,请提交评论并审核通过刷新后即可查看!

结果测试

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

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

Honest1y
版权声明:本站原创文章,由Honest1y于2017年10月20日发表,共计2353字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(10条评论)
头像
On the way°  评论达人LV.1
2017-10-22 18:04:30 回复

66666 可以

头像
腾讯视频 评论达人LV.2
2018-06-08 11:39:59 回复

666 可以啊

头像
BEGINNING 评论达人LV.1
2018-10-12 14:24:49 回复

66666666666

头像
zhattyt 评论达人LV.1
2018-12-26 00:07:36 回复

66666666666真的可以

头像
请输入您的QQ号 评论达人LV.1
2018-12-26 00:08:37 回复

66666666666 :smile:

头像
aike 评论达人LV.1
2020-06-14 17:45:52 回复

感谢分享

头像
aike 评论达人LV.1
2020-06-14 17:47:00 回复

6666666

头像
aike 评论达人LV.1
2020-06-14 17:49:17 回复

6666666 :wink: :wink:

头像
aikers 评论达人LV.1
2020-06-14 17:59:55 回复

66666666666