9

使用HSTS协议强制浏览器使用HTTPS协议访问网站

 3 years ago
source link: https://blog.vimge.com/archives/other/https-hsts.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
首页 > 其他, 架构 > 使用HSTS协议强制浏览器使用HTTPS协议访问网站

使用HSTS协议强制浏览器使用HTTPS协议访问网站

大家都知道网站启用SSL数字证书后使用HTTPS协议可以保证服务器与浏览器端数据加密,但与此同时不可避免另外一个问题,总存在部分用户会直接输入域名的方式访问网站,默认浏览器是使用HTTP协议访问网站的,此时即便网站启用了SSL数字证书,此时用户与服务器端的数据交互仍然使用的是明文传输方式,用户数据得不到保护,因为SSL数字证书没有生效。

可能你会说那不如直接关闭80端口吧(好吧,如果你是API等后台服务大可不必考虑前台用户访问的问题)或HTTP访问的时候直接跳转到HTTPS协议吧(直接跳转其实也存在『中间人』攻击风险),其实这个问题有更好的方案,这就是下面要介绍的

HSTS(HTTP Strict Transport Security),它是一个Web安全策略机制(web security policy mechanism),它通过服务器为HTTP响应增加如下一个Header 来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险:

Strict-Transport-Security:max-age=63072000; includeSubdomains; preload

只要在服务器返回给浏览器的响应头中,增加 Strict-Transport-Security这个HTTP Header 浏览器都将直接强制性的发起HTTPS请求,现在访问机制如下

HSTS_1

HSTS Header max-age参数为有效期,在有效期内,浏览器只要向xxx或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。

通常如果因为过期或其他原因导致SSL证书失效的时候,浏览器会提示我们证书失效并提示风险,但我们仍然能够访问网站,如果使用了HSTS后则服务器将严格禁止继续访问,提示如下

HSTS_2

不足和缺陷

至此,你可能会发现,HSTS协议其他还是有他的缺陷,即用户首次访问的时候依然要借助HTTP协议返回HSTS Header,这将依然会产生一次中间人攻击风险。

Preload List

针对上面的攻击,HSTS也有应对办法,那就是在浏览器里内置一个列表,只要是在这个列表里的域名,无论何时、何种情况,浏览器都只使用HTTPS发起连接。这个列表由Google Chromium维护,FireFox、Safari、IE等主流浏览器均在使用。

可以在HSTS Preload List的官网上(https://hstspreload.org)提交申请,或者了解更多详细的内容。


2017-8-1 更新

百度近期推出了HTTPS认证,在百度站长工具里面认证通过后网站收录自动替换为HTTPS协议,结合HSTS进一步降低了入口风险,毕竟很多用户流量都来自百度

  1. 本文目前尚无任何评论.
昵称
电子邮箱 (我们会为您保密)
网址

验证码: =2加6(必填)请输入两数相加的结果。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK