HTTP严格传输安全

HTTP严格传输安全（，縮寫：HSTS）是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略，来让浏览器强制使用HTTPS与网站进行通信，以减少会话劫持风险。

其徵求修正意見書文件编号是-{}-RFC 6797，发布于2012年11月。

内容
HSTS的作用是强制客户端（如浏览器）使用HTTPS与服务器建立连接。服务器开启HSTS的方法是，当客户端通过HTTPS发出请求时，在服务器返回的超文本传输协议（HTTP）响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。

比如，https://example.com/ 的响应头含有Strict-Transport-Security: max-age=31536000; includeSubDomains。这意味着两点：
在接下来的31536000秒（即一年）中，浏览器向example.com或其子域名发送HTTP请求时，必须采用HTTPS来发起连接。比如，用户点击超链接或在地址栏输入 http://www.example.com/ ，浏览器应当自动将 http 转写成 https，然后直接向 https://www.example.com/ 发送请求。
在接下来的一年中，如果 example.com 服务器发送的TLS证书无效，用户不能忽略浏览器警告继续访问网站。

历史
HSTS的雏形来自于2008年4月在北京召开的第十七届上柯林·杰克逊（）和亚当·巴斯（）的题为“ForceHTTPS: Protecting High-Security Web Sites from Network Attacks”的演讲。他们的提议是使用“ForceHTTPS” Cookie来强制浏览器使用HTTPS。

2009年9月18日，他们和杰夫·霍奇斯（）发布了最初的草案，题目为"Strict Transport Security"，这个草案基于ForceHTTPS，并有所修改。

2010年6月17日，这三位作者经由互联网工程任务组发布了首版，"HTTP Strict Transport Security"。

2012年10月2日，批准了将第14版HSTS草案发布为RFC的请求。

2012年11月19日，互联网工程任务组发布RFC 6797。

作用
HSTS可以用来抵御SSL剥离攻击。SSL剥离攻击是中间人攻击的一种，由于2009年发明。他在当年的黑帽大会上发表的题为“New Tricks For Defeating SSL In Practice”的演讲中将这种攻击方式公开。SSL剥离的实施方法是阻止浏览器与服务器建立HTTPS连接。它的前提是用户很少直接在地址栏输入https://，用户总是通过点击链接或3xx重定向，从HTTP页面进入HTTPS页面。所以攻击者可以在用户访问HTTP页面时替换所有https://开头的链接为http://，达到阻止HTTPS的目的。

HSTS可以很大程度上解决SSL剥离攻击，因为只要浏览器曾经与服务器建立过一次安全连接，之后浏览器会强制使用HTTPS，即使链接被换成了HTTP。

另外，如果中间人使用自己的自签名证书来进行攻击，浏览器会给出警告，但是许多用户会忽略警告。HSTS解决了这一问题，一旦服务器发送了HSTS字段，将不再允许用户忽略警告。

不足
用户首次访问某网站是不受HSTS保护的。这是因为首次访问时，浏览器还未收到HSTS，所以仍有可能通过明文HTTP来访问。解决这个不足目前有两种方案，一是浏览器预置HSTS域名列表，Google Chrome、Firefox、Internet Explorer和Microsoft Edge实现了这一方案。二是将HSTS信息加入到域名系统记录中。但这需要保证DNS的安全性，也就是需要部署域名系统安全扩展。截至2016年这一方案没有大规模部署。

由于HSTS会在一定时间后失效（有效期由max-age指定），所以浏览器是否强制HSTS策略取决于当前系统时间。部分操作系统经常通过网络时间协议更新系统时间，如Ubuntu每次连接网络时、OS X Lion每隔9分钟会自动连接时间服务器。攻击者可以通过伪造NTP信息，设置错误时间来绕过HSTS。解决方法是认证NTP信息，或者禁止NTP大幅度增减时间。比如Windows 8每7天更新一次时间，并且要求每次NTP设置的时间与当前时间不得超过15小时。

浏览器支持
 Chromium和Google Chrome从4.0.211.0版本开始支持HSTS
 Firefox 4及以上版本
 Opera 12及以上版本
 Safari从OS X Mavericks起
 Internet Explorer和Microsoft Edge从Windows 10开始支持

网站支持
根据SSL Pulse的调查，截至2015年2月，仅有2.7%的网站开启了HSTS。目前支持HSTS的主流网站有：支付宝、PayPal、Twitter、维基百科等。

参见

 超文本传输安全协议
 传输层安全协议
 中间人攻击
 HTTP公钥固定

参考文献

外部链接
 RFC 6797, HTTP Strict Transport Security (HSTS)
 IETF WebSec Working Group（互联网工程任务组中的WebSec工作小组主页）
 Security Now 262: Strict Transport Security（HSTS视频讲解）
 Open Web Application Security Project (OWASP): HSTS description（OWASP上的HSTS条目）
 Online browser HSTS and Public Key Pinning test（浏览器支持测试）
 HSTS Preload Submission（提交网站至主流浏览器的HSTS预置列表）
 Linux 開啟 HSTS 安全機制 

HTTP
网络安全
互联网标准
电脑安全
密码学
傳輸層安全協議