文档章节

HTTP严格传输安全协议 (HSTS)

qlee
 qlee
发布于 2017/05/22 22:36
字数 1092
阅读 254
收藏 2

HSTS

HTTP协议最初通过TCP传输,后为了传输安全,加入了SSL/TLS作为中间层,称为HTTPS(HTTP over SSL)。当在浏览器中输入一个域名访问时,浏览器默认会通过HTTP协议访问服务器,服务端可以返回301以跳转到HTTPS,此后所有数据传输通过HTTPS传输。然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。

HTTP Strict Transport Security,即HSTS协议提供了一个机制,让服务端可以主动告知浏览器,以后的请求全部严格地通过HTTPS进行。

HSTS如何工作

启用HSTS

服务端向浏览器发送响应时,可以在响应头部中添加Strict-Transport-Security,告知浏览器开启HSTS。

如响应头部中有Strict-Transport-Security: max-age=86400表示为当前域名启用HSTS,过期时间为1天。

如响应头部中有Strict-Transport-Security: max-age=259200; includeSubDomains表示为当前域名和所有的子域名启用HSTS,过期时间为30天。

Tips

  • 只有在安全传输中Strict-Transport-Security头部才会生效。在HTTP(而不是HTTPS)中Strict-Transport-Security头部会被忽略
  • max-age的值为TTL(即生存时间),值为0时(例如Strict-Transport-Security: max-age=0)浏览器将关闭此域名的HSTS设置

浏览器自动跳转HTTPS

对于开启了HSTS的域名,浏览器将强制采用HTTPS。

1. 直接访问域名时跳转

在浏览器中访问域名时,如果域名开启了HSTS,浏览器将发生内部跳转,直接跳转到HTTPS进行访问。即使用户手动输入http://domainname访问,仍会发生强制跳转。

2. 网页中的链接跳转

网页中的资源,如果其URL的域名启用了HSTS,浏览器请求此资源时将自动跳转的HTTPS。 如网页中有链接<img src="http://qlee.in/static/logo.img>,而且qlee.in开启了HSTS,浏览器将自动到https://qlee.in/static/logo.img请求相应的资源。

3. 端口的处理

HTTP默认采用80端口,HTTPS默认采用443端口。当浏览器因为HSTS执行内部跳转时

  • 1 如果没有显式指定端口,浏览器跳转时也不会显式指定端口,默认HTTPS会访问443端口
  • 2 如果指定了80端口,浏览器跳转时会将端口转换为443端口
  • 3 如果指定了其他端口,浏览器跳转时会保留指定的端口

HSTS对SSL连接的影响

HSTS中的Strict不只是强制跳转到HTTPS,也包含了对HTTPS连接建立的处理。开启HSTS后,一旦有警告或者错误,浏览器将直接关闭HTTPS连接。包括以下几种

  1. SSL证书过期或者验证失败。没有开启HSTS时,一旦遇到证书过期、域名不匹配、签名验证失败等情况,浏览器将要求用户选择是否继续。而开启HSTS后,浏览器将关闭连接,无法继续访问。
  2. 证书通过OCSP或CRLs等方式被撤销。

取消HSTS

1. 服务器端关闭HSTS

服务端可以通过响应的添加头部Strict-Transport-Security: max-age=0或者Strict-Transport-Security: max-age=0; includeSubDomains来告知浏览器关闭域名的HSTS

2. 浏览器端关闭HSTS

对于chrome浏览器,地址栏中输入chrome://net-internals/#hsts进入HSTS设置页面,可以查询、删除指定域名的HSTS设置,也可以手动为域名开启HSTS。

对于chrome和firefox浏览器,可以通过删除域名的历史记录来清除域名的HSTS设置。

HSTS preload list

google维护了一个称为“HSTS preload list”的站点域名和子域名列表,主流的web浏览器(Chrome, Firefox, Opera, Safari, IE 11 and Edge) 都采用了该域名列表,对列表中的域名强制开启HSTS。域名的所有者可以通过https://hstspreload.org/提交其域名。

参考链接

© 著作权归作者所有

qlee

qlee

粉丝 10
博文 31
码字总数 40447
作品 0
闵行
程序员
私信 提问
HSTS 详解,让 HTTPS 更安全

随着互联网的快速发展,人们在生活中越来越离不开互联网。无论是社交、购物还是搜索,互联网都能给人带来很多的便捷。与此同时,由于用户对网络安全的不了解和一些网站、协议的安全漏洞,让很...

又拍云
04/25
0
0
用HSTS进一步增强网站安全性

由于 等免费证书的存在,各位站长都可以很容易的加固自己的网站。然而 HTTPS 不是万能药,并不是加入 HTTPS 支持就万事大吉了。 譬如说,就算你加入了 HTTPS 支持,要如何让用户使用 HTTPS ...

CarterLi
2017/09/18
0
0
怎样在服务器上启用 HTTPS

摘要 创建一个 2048 位 RSA 公钥/私钥对。 生成一个嵌入您的公钥的证书签名请求 (CSR) 将 CSR 与证书颁发机构 (CA) 共享以接收最终证书或证书链。 将最终证书安装在非网络可访问的位置,例如...

01/25
0
0
chrome NET::ERR_CERT_AUTHORITY_INVALID提示网址不安全无法访问

1. 问题描述 今天用Apache搭建好PC端服务器后,用Chrome测试,打开http://www.baidu.com/时出现了如下的错误: 2. 错误原因 经试验发现,对于firefox和IE不会出现上述问题。或者会出现安全警...

無言地对白
2018/01/03
0
0
HTTPS-Only 标准

美国人民希望政府网站是安全的,并且他们在这些网站的访问是作为隐私被保护的。HTTPS协议用当今的因特网技术为公共网络连接提供了最强的隐私保护。HTTPS的使用降低了用户在使用政府在线服务时...

oschina
2015/03/19
7.4K
19

没有更多内容

加载失败,请刷新页面

加载更多

EasyExcel

<!-- alibaba EasyExcel escel导入导出 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>easyexcel</artifactId> <version>1.0.0-RELEASE</version> </dependency>......

少年已不再年少
22分钟前
0
0
解决:warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]

代码 static int CheckOneReg(uint8_t busNo, char *title, int32_t addr, uint32_t *val, BOOL isPrintfNL, ErrMsg_t const *pMsg)res |= CheckOneReg(busNo,"fwVer:", HALREG_FW_VER, ......

SamXIAO
23分钟前
0
0
jenkins搭建全流程

安装环境   操作系统:linux   软件:jdk 8   软件:tomcat(apache-tomcat-7.0.90) 软件:jenkins 软件:maven 软件:git 1.1安装步骤 1.1.1安装jdk 由于Jenkins是基于Java开发的,安...

shzwork
29分钟前
0
0
Java的战争

本文来自微信公众号: 金捷幡(ID:jin-jiefan) ,作者:金捷幡,封面:拉里·埃里森(东方IC) 2019年5月,彻底撕破脸的特朗普掀起对华为的战争,谷歌被迫吊销了华为的Android授权。开源软...

Java领航员
今天
8
0
超详细的LM3414MRX/NOPB规格参数介绍就在这里

超详细的LM3414MRX/NOPB规格参数介绍就在这里 描述 LM3414和LM3414MRX/NOPB是具有1-A 60 W(1)共阳极功能的恒流降压LED驱动器。它们适用于驱动单串3-W HBLED,效率高达96%。它们可接受4.5...

不能吃肉的仙女
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部