hsts(http strict transport security,http 严格传输安全),是一套由互联网工程任务组发布的互联网安全策略机制。网站可以通过配置 hsts,来强制浏览器使用 https 与网站通信,保障网站更加安全。
hsts的作用是强制客户端(如浏览器)使用https与服务器创建连接。服务器开启hsts的方法是,当客户端通过https发出请求时,在服务器返回的超文本传输协议响应头中包含 `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`证书无效,用户不能忽略浏览器警告继续访问网站。如何进行配置?以 nginx 为例,我们在对应域名的 vhost 中增加响应头:server {....add_header strict-transport-security max-age=31536000; includesubdomains; preload;...}。
max-age,单位是秒,用来告诉浏览器在指定时间内,这个网站必须通过 https 协议来访问。也就是对于这个网站的 http 地址,浏览器需要先在本地替换为 https 之后再发送请求。includesubdomains,可选参数,如果指定这个参数,表明这个网站所有子域名也必须通过 https 协议来访问。preload,可选参数,hsts 这个响应头只能用于 https 响应;网站必须使用默认的 443 端口;必须使用域名,不能是 ip。而且启用 hsts 之后,一旦网站证书错误,用户无法选择忽略。
hsts 可以很好地解决 https 降级攻击,但是对于 hsts 生效前的首次 http 请求,依然无法避免被劫持。浏览器厂商们为了解决这个问题,提出了 hsts preload list 方案:内置一份可以定期更新的列表,对于列表中的域名,即使用户之前没有访问过,也会使用 https 协议。
目前这个 preload list 由 google chrome 维护,chrome、firefox、safari、ie 11 和 microsoft edge 都在使用。如果要想把自己的域名加进这个列表,首先需要满足以下条件:
拥有合法的证书(如果使用 sha-1 证书,过期时间必须早于 2016 年);将所有 http 流量重定向到 https;确保所有子域名都启用了 https;输出 hsts 响应头:max-age 不能低于 18 周(10886400 秒);必须指定 includesubdomains 参数;必须指定 preload 参数;
但是,即便满足了上述所有条件,也不一定能进入 hsts preload list,更多信息可以看这里(https://hstspreload.org/)。通过 chrome 的 chrome://net-internals/#hsts 工具,可以查询某个网站是否在 preload list 之中,还可以手动把某个域名加到本机 preload list。
对于 hsts 以及 hsts preload list,我的建议是只要你不能确保永远提供 https 服务,就不要启用。因为一旦 hsts 生效,你再想把网站重定向为 http,之前的老用户会被无限重定向,唯一的办法是换新域名。如果确定要开启,点击https://hstspreload.org,输入你的域名,勾选协议,提交即可。提交成功后会给你返回成功的信息,不过你要保证你的配置比如是一直开启了,否则也会从列表中删除。
此外,我们要做到让https 网站更安全更快速,还应当做到以下几点:第一,密钥要足够的复杂,以rsa 密钥对为例,最好超过2048位;第二,ssl_ciphers 的合理配置,尽量抛弃那些已经被证明不安全的加密算法,使用较新的被证明无安全威胁的算法。第三,避免使用已经被证明不安全的加密协议,例如 sslv2和sslv3 ,而使用 tlsv1.2 tlsv1.3。
一般来说较新的协议都是针对上一个版本进行了很多的优化,比如tls1.2和tls1.3协议,可以看下这2个协议的加密过程,tls1.2 协议中需要加密套件协商、密钥信息交换、changecipherspec 协议通告等过程,需要消耗 2-rtt 的握手时间,这也是造成 https 协议慢的一个重要原因之一。
海拉致力绿色出行,参展2018中国国际电动汽车会议
千元全面屏性价比王者之争!红米note5快来吧,别让华为荣耀畅玩7x抢了你的风头
跌出全球手机销量前五,小米6能让小米重回增长之路吗?
已有10万台5G设备接入澳大利亚电信网络
IBM出售天气预报应用,专注AI和云计算
该如何构建好安全的HTTPS站点
你需要了解变频电源的系统原理
光电耦合器工作原理详细解说
传承悠远文化,爱普生进博会潮玩匠心艺术
大陆未来在NAND市场将占一席之地,NANDFlash市况吃紧
华为P11什么时候上市?华为P11最新消息:华为P11配置较华为P10大升级,或将采用4D touch
东芝计划本月完成出售西屋电气债权 西屋电气困局将宣告结束
科技零距离第6期邀请 | 实现厘米级精准定位?UWB测试研发攻略
2020中国(深圳)集成电路峰会报名启动
苹果13预售价格、上市时间
高通推出骁龙XR2+ Gen 2芯片,与苹果Vision Pro展开竞争
人工智能项目失败的三个原因
三星亦推出人工智能语音服务 预装应用均可使用
铁路局发布《调度集中与计算机联锁接口规范》等13项铁道行业技术标准
具有轨至轨输出级的LTC6241模数转换器的性能及应用分析