这个问题目前有两种解决方案:
选项 1:
浏览器中预设的HSTS域名列表就是上面提到的HSTS List解决方案。此域名列表分发并硬编码到主要的 Web 浏览器中。访问此列表中的域的客户端将主动使用 HTTPS 并拒绝使用 HTTP 访问该站点。
选项 2:
将 HSTS 信息添加到域名系统记录。但这需要保证DNS的安全,即需要部署域名系统安全扩展。
其他可能的问题
由于 HSTS 会在一定时间后过期(有效期由 max-age 指定),所以浏览器是否强制执行 HSTS 策略取决于当前系统时间。大多数操作系统通常通过网络时间合同来更新系统时间。例如,每次连接到 时,OS X Lion 会每 9 分钟手动连接一次时间服务器。攻击者可以通过伪造NTP信息和设置错误时间来绕过HSTS。
解决办法是对NTP信息进行认证,或者严格禁止NTP显着增加或减少时间。例如:8 时间每7天更新一次,每次NTP设置的时间与当前时间不得超过15小时。
支持HSTS浏览器
目前主流浏览器已经支持HSTS功能,具体请参考以下列表:
HSTS 部署
服务器开启HSTS的方式是:客户端通过HTTPS发送请求时,服务器返回的超文本传输协议响应头中包含--字段。非加密传输设置的HSTS数组无效。
最好的部署解决方案是部署在靠近用户的位置。例如,如果架构有后端反向代理和前端Web服务器,最好在后端代理配置HSTS。服务器层配置 HSTS。如果 Web 服务器没有明确支持 HSTS配置burpsuit谷歌浏览器证书及HSTS问题处理配置burpsuit谷歌浏览器证书及HSTS问题处理,它可以使用降低响应头的机制。如果一切都失败了,可以在应用层降低 HSTS。
HSTS开启比较简单,在对应的中加入如下信息即可:
Strict-Transport-Security: max-age=63072000; includeSubdomains;preload;
--是数组名,
max-age 表示 HSTS 在客户端的有效时间。
表示对所有子域都有效。
是浏览器外部的域名列表。
HSTS 策略只能在 HTTPS 响应中设置,网站必须使用默认的 443 端口;必须使用域名,而不是IP。因此,有必要将 HTTP 重定向到 HTTPS。如果允许在明文响应中设置 HSTS 标头,则中间人攻击者可以通过将 HSTS 信息注入普通站点进行 DoS 攻击。
启用 HSTS
$ vim /etc/apache2/sites-available/hi-linux.conf
# 开启HSTS需要启用headers模块
LoadModule headers_module /usr/lib/apache2/modules/mod_headers.so
ServerName www.hi-linux.com
ServerAlias hi-linux.com
...
#将所有访问者重定向到HTTPS,解决HSTS首次访问问题。
RedirectPermanent / https://www.hi-linux.com/
...
# 启用HTTP严格传输安全
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"
...
重启服务
$ service apche2 restart
在 Nginx 上启用 HSTS
$ vim /etc/nginx/conf.d/hi-linux.conf
server {
listen 443 ssl;
server_name www.hi-linux.com;
add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";
...
}
server {
listen 80;
server_name www.hi-linux.com;
return 301 https://www.hi-linux.com$request_uri;
...
}
重启Nginx服务
$ service nginx restart
IIS 启用 HSTS
在 IIS 上启用 HSTS 需要第三方模块
测试是否设置成功
设置完成后,可以使用curl命令验证设置是否成功。如果结果是丰富的--数组,则设置成功。
$ curl -I https://www.hi-linux.com
HTTP/1.1 200 OK
Server: nginx
Date: Sat, 27 May 2017 03:52:19 GMT
Content-Type: text/html; charset=utf-8
...
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
X-Frame-Options: deny
X-XSS-Protection: 1; mode=block
X-Content-Type-Options: nosniff
...
对于HSTS和HSTS List,只要不保证永远提供HTTPS服务,建议不要开启HTTPS。因为一旦HSTS生效,之前的老用户会在max-age到期之前被重定向到HTTPS,导致网站无法正常访问。唯一的办法是获得一个新的域名。
评论留言