nik*_*sfi 6 security ssl https
如果我正在运行仅HTTPS服务,是否有任何理由不启用HSTS?是否有一种策略来测试HSTS而不是永久性地启用HSTS或"退出"HSTS?
从深度防御的角度来看,您仍应启用HTTP严格传输策略(HSTS).将来可能会出现一些可能受益于HSTS的问题,包括:
您还应该确保足够长的HSTS寿命,例如一年或更长时间.
您可以通过将max-age设置为0来禁用对HSTS的支持.只要您最初设置该值,就需要保留此标头.例如,如果您将其设置为2年并改变主意,则需要将max-age = 0保留至少2年(并继续在该域上提供HTTPS服务),以便过去的客户不会连接到它的任何问题.
我想向Mike的回答添加警告,您可能没有运行仅限HTTPS的服务.原因是当您的服务器不在端口80上侦听时,如果您只键入域而不是协议(stackoverflow.com
而不是https://stackoverflow.com
),您的浏览器将不会自动尝试连接端口443(https)并显示连接错误.因此,对于大多数站点而言,仅HTTPS服务是不可能的.
以确保通过301/303向前每个HTTP页面转发到HTTPS页面的HTTPS连接的传统方式是不足够的替代HSTS.事实上,HSTS正是针对该案例而建立的.原因是许多书签和链接仍然指向http,并且每次用户输入URL而不指定协议 - 这总是 - 浏览器将首先尝试http连接.主动攻击者可以劫持第一个连接,并且永远不会将用户转发到https站点.
为了让您更加生动地了解这种攻击,可以想象一个国家将每个DNS请求欺骗到Twitter并使用自己的IP进行回答.当它收到https请求时,它会将其转发到Twitter而不进行任何操作(并且有可能进行拦截).但是当它收到一个http请求时,它使用Mike提到的工具ssl strip来透明地将连接内容转发到twitter的TLS端口.用户和Twitter都没有注意到任何内容已关闭(除了检查TLS加密的警报用户之外),但状态可以访问每个登录密码.
HSTS可以保护那些之前与服务器具有合法https连接且已经看过HSTS标头的用户.标头指示浏览器用https url本身(在完全建立http连接之前)交换域的每个http url,并拒绝任何未加密的连接到该域.因此,在上面的场景中,几乎所有用户都不会在受到破坏的http连接上结束,并且可以安全地抵御全国范围内的攻击.