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

742次阅读

共计 1393 个字符,预计需要花费 4 分钟才能阅读完成。

在网站全站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响应头格式

[v_notice]

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

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

 

 

支持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.srelife.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访问

正文完
 
mervinwang
版权声明:本站原创文章,由 mervinwang 2017-10-20发表,共计1393字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
文章搜索