什么是HSTS?
国际互联网工程组织 IETE 正在推行一种新的 Web安全协议HTTP Strict Transport Security(HSTS)。采用 HSTS 协议的网站将保证浏览器始终连接到该网站的 HTTPS 加密版本,不需要用户手动在 URL 地址栏中输入加密地址。该协议将帮助网站采用全局加密,用户看到的就是该网站的安全版本。
HSTS 的作用是强制客户端(如浏览器)使用 HTTPS 与服务器创建连接。服务器开启 HSTS 的方法是,当客户端通过 HTTPS 发出请求时,在服务器返回的超文本传输协议响应头中包含 Strict-Transport-Security 字段。非加密传输时设置的 HSTS 字段无效。
强制整站进行https访问,避免的使用跳转时可能被劫持的风险。
部署HSTS
下面介绍常用的Apache和Nginx部署情况:
Apache上启用HSTS
开启HSTS需要先用headers模块
sudo ln -s /etc/apache2/mods-available/headers.load /etc/apache2/mods-enabled
修改default-ssl.conf配置文件,添加
Header always set Strict-Transport-Security "max-age=15768000; includeSubdomains; preload"
Nginx上启用HSTS
server {
listen 443 ssl;
server_name www.xxx.com;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
...
}
server {
listen 80;
server_name www.xxx.com;
return 301 https://www.xxx.com$request_uri;
...
}
Strict-Transport-Security是Header字段名,max-age代表HSTS在客户端的生效时间,单位:秒。 includeSubdomains表示对所有子域名生效。preload是使用浏览器内置的域名列表。
开启 HSTS 后网站安全系数检测测评
开启 HSTS 以后,可以到 ssllabs 进行测试,网站的安全等级会进一步提升。
开启前安全等级A:
开启后安全等级A+: