采用HSTS实现HTTP跳转HTTPS

什么是HSTS

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

主要目的是为了解决HTTPS网站首次请求时使用的是未加密的HTTP协议,也就说用户一般访问我们的网站都是直接在浏览器输入域名,比如morong.me,然后我们的服务器检测到是HTTP请求,就301跳转到HTTPS页面。那么前半程采用的就是未加密的HTTP请求,同样存在被劫持的可能,那么HTTPS说好的安全性也就大打折扣了!

开启HSTS


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

1、Nginx服务器

找到nginx.conf配置文件,在网站的server配置代码里面加入如下代码:

server {
listen xx.xx.xx.xx:443 ssl spdy;
server_name www.gworg.com;
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains"; #加入此行代码

……

}

2、Apache服务器

LoadModule headers_module modules/mod_headers.so

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"


3、Lighttpd


server.modules += ( "mod_setenv" )
$HTTP["scheme"] == "https" {
setenv.add-response-header = ( "Strict-Transport-Security" => "max-age=63072000; includeSubdomains; preload")
}

4、通用方法

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

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

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

篇尾语:HSTS有利有弊,启用了的网站如果后期想http访问需要一段时间才可以恢复,另外目前不是所有的浏览器都支持HSTS,所以对于想使用这种方法强制跳转https的用户可以综合考虑下。