HTTP hst协议和nginx
Netcraft公司最近公布了他们检测SSL/TLS网站的研究,并指出只有仅仅5%的用户正确执行了HTTP严格传输安全hst。本文介绍nginx如何配置hst。
什么是hst
HTTPS (SSL和TLS)确保用户和网站通讯过程中安全,使攻击者难于拦截,修改和假冒。当用户手动输入域名或http://链接,该网站的第一个请求是未加密的,使用普通的http。最安全的网站立即发送回一个重定向使用户引向到HTTPS连接,然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。
自然而然hst应运而生为了解决这一潜在的安全问题。即时用户输入域名或http连接,浏览器将严格的升级到https连接。
hst如何工作的
hst策略是从安全的HTTPS站点发送的HTTP响应头部发布的。
1当浏览器从HTTPS站点看到这个头部,就知道该域名只能通过HTTPS (SSL或者TLS)访问了。并将此信息缓存到31536000,也就是1年。
可选的参数includeSubDomains告诉浏览器该策略适用于当前域下的所有子域。
1nginx配置hst
在nginx配置文件上设置hst响应头部。
1总是参数确保所有的响应设置该头部,包括内部产生的错误响应.nginx版本早于1.7.5不支持该总是参数和内部产生的错误响应不设置该头部信息。
add_header指令继承规则:
nginx配置块继承add_header指令所在的封装块,因此只需将add_header指令放在顶级的服务器块。此外还有个重要的例外,如果一个块包含了add_header指令本身,它不会从封装块继承该头部,你需要重新定义所有的add_header指令。
1 2 3. 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 头测试HTTP严格传输安全:
一旦用户提出hst策略,它的缓存信息期由信息指定。在此期间,浏览器将会拒绝通过未加密的HTTP访问web服务,并拒绝给予例外证书错误(如果该网站以前提交了一个有效可信的证书)。如果指定了一个includeSubDomanis参数,这些限制也同样适用于当前域下的所有子域。
当你测试hst时,信息时间设置短点。
是否每个HTTPS响应需要有一个STS头部:
我们的目标是当用户开始HTTPS回话时,尽可能快的呈现hst策略。如果他们在回话期间接收到hst策略,他们仍然容易受到HTTP劫持攻击的。浏览器只需查看一次STS头部,因此它不是严格必要将它添加到每个位置块和每个响应。然而,只在主页或者登陆页面添加它可能是不够的,如果你只添加到缓存的响应,客户端可能无法看到它。确保尽可能多的合理的覆盖到你的URL,特别注意动态的内容。
HTTP和HTTPS并行
有时网站需要同时运行在HTTP和HTTPS下
1 2 3. 4 5有时,需要将http请求重定向到https
1 2 3. 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 的名字