如果我正在运行仅限HTTPS的服务,是否有任何理由不启用HSTS?是否有一种策略来测试HSTS而不是永久启用HSTS或“退出”HSTS?
答案 0 :(得分:5)
从深度防御角度来看,您仍应启用HTTP Strict Transport Policy(HSTS)。将来可能会出现一些可能受益于HSTS的问题,包括:
您还应该确保足够长的HSTS寿命,例如一年或更长时间。
您可以通过将max-age设置为0来禁用对HSTS的支持。只要您最初设置该值,就需要保留此标头。例如。如果您将其设置为2年并改变主意,则需要将max-age = 0保留至少2年(并继续在该域上提供HTTPS服务),以便过去的客户不会有任何连接它的问题。
答案 1 :(得分:5)
我想在Mike的回答中添加警告,您可能不运行仅限HTTPS的服务。原因是,当您的服务器不在端口80上侦听时,如果您只输入域而不是协议(stackoverflow.com
而不是https://stackoverflow.com
),您的浏览器将不会自动尝试连接在端口443(https)上显示连接错误。因此,对于大多数站点而言,仅HTTPS服务是不可能的。
通过301/303转发is not a sufficient replacement for HSTS将每个http页面转发到https页面来确保https连接的经典方法。事实上,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连接上结束,并且可以安全地抵御全国范围内的攻击。</ p>