HTTP hst协议和nginx

  

HTTP hst协议和nginx

  

Netcraft公司最近公布了他们检测SSL/TLS网站的研究,并指出只有仅仅5%的用户正确执行了HTTP严格传输安全hst。本文介绍nginx如何配置hst。

  

什么是hst

  

HTTPS (SSL和TLS)确保用户和网站通讯过程中安全,使攻击者难于拦截,修改和假冒。当用户手动输入域名或http://链接,该网站的第一个请求是未加密的,使用普通的http。最安全的网站立即发送回一个重定向使用户引向到HTTPS连接,然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。

  

自然而然hst应运而生为了解决这一潜在的安全问题。即时用户输入域名或http连接,浏览器将严格的升级到https连接。

  

   HTTP hst协议和nginx

  

hst如何工作的

  

hst策略是从安全的HTTPS站点发送的HTTP响应头部发布的。

           1                                       

当浏览器从HTTPS站点看到这个头部,就知道该域名只能通过HTTPS (SSL或者TLS)访问了。并将此信息缓存到31536000,也就是1年。

  

可选的参数includeSubDomains告诉浏览器该策略适用于当前域下的所有子域。

           1                                             

nginx配置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                                                            的名字                                                                                                                              

HTTP hst协议和nginx