HTTPS安全部署:HSTS头部署

HSTS作用

HTTP严格传输安全(HTTP Strict transport securityHSTS),配置浏览器对整个域名空间使用HTTPS来加密,它具备以下优点:

  • HSTS可以禁止浏览器使用无效证书(浏览器的默认策略是让用户决定是否放行,而用户往往因为不能区分无效是因为配置问题还是攻击而选择继续访问从而导致遭受网络攻击)

  • HSTS对以下情况可以仍然保持HTTPS通信:

    • 用户保存了原始网站的书签
    • 不安全的Cookie
    • HTTPS 剥离攻击
    • 网站内容混布,但需配合CSP(内容安全策略)

HSTS部署

通过在加密的HTTP响应中包含Strict-Transport-Security头来实现网站HSTS,例如

1
Strict-Transport-Security: max-age=63072000; includeSubdomains;preload;

最佳的部署方案是部署在离用户最近的位置,例如架构有前端反向代理和后端web服务器,在前端代理处配置HSTS是最好的,否则就需要在web服务器层配置HSTS。如果web服务器不明确支持HSTS,可以通过增加响应头的机制,但需要阅读各种服务器的附属细则。如果其他方法都失败了,可以在应用程序层增加HSTS

Apache

启用HTTP严格传输安全

1
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

HSTS策略只能在加密通道的HTTP响应中进行设置,因此需要把http重定向到https,如果明文响应中允许设置HSTS头,中间人攻击者就可以通过在普通站点中注入HSTS信息来执行DoS攻击

1
2
3
4
5
6
7
<VirtualHost *:80>
ServerName www.carey.com
ServerAlias carey.com
#将所有访问者重定向到加密的网站
RedirectPermanent / https://www.carey.com/
<VirtualHost>

IIS

第三方模块 https://hstsiis.codeplex.com/

Nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen xxxx:443 ssl;
server_name www.example.com;
add_header Strict-Transport-Security "max-age=31536000;includeSubdomains;preload";
….
}
server {
listen xxxx:80;
server_name www.carey.com;
return 301 https://www.carey.com$request_uri;
}
注意:`addheader`指令只会将`HTTP`头添加到非错误响应中`2xx`和`3xx`

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器