一个网站接受一个HTTP的请求,然后跳转到HTTPS,用户可能在开始跳转前,通过没有加密的方式和服务器对话,比如,用户输入http://zt.test.com或者直接zt.test.com。这样存在中间人攻击潜在威胁,跳转过程可能被恶意网站利用来直接接触用户信息,而不是原来的加密信息。网站通过HTTP Strict Transport Security通知浏览器,这个网站禁止使用HTTP方式加载,浏览器应该自动把所有尝试使用HTTP的请求自动替换为HTTPS请求。

HTTP Strict Transport Security (HSTS) is an opt-in security enhancement that is specified by a web application through the use of a special response header. Once a supported browser receives this header that browser will prevent any communications from being sent over HTTP to the specified domain and will instead send all communications over HTTPS. It also prevents HTTPS click through prompts on browsers.
The specification has been released and published end of 2012 as RFC 6797 (HTTP Strict Transport Security (HSTS)) by the IETF. (Reference see in the links at the bottom.)

有的网站开启了https,但为了照顾用户的使用体验(因为用户总是很赖的,一般不会主动键入https,而是直接输入域名, 直接输入域名访问,默认就是http访问)同时也支持http访问,当用户http访问的时候,就会返回给用户一个302重定向,重定向到https的地址,然后后续的访问都使用https传输,这种通信模式看起来貌似没有问题,但细致分析,就会发现种通信模式也存在一个风险,那就是这个302重定向可能会被劫持篡改,如果被改成一个恶意的或者钓鱼的https站点,然后,你懂得,一旦落入钓鱼站点,数据还有安全可言吗?

对于篡改302的攻击,建议服务器开启HTTP Strict Transport Security功能,这个功能的含义是:

当用户已经安全的登录开启过htst功能的网站 (支持hsts功能的站点会在响应头中插入:Strict-Transport-Security) 之后,支持htst的浏览器(比如chrome. firefox)会自动将这个域名加入到HSTS列表,下次即使用户使用http访问这个网站,支持htst功能的浏览器就会自动发送https请求(前提是用户没有清空缓存,如果清空了缓存第一次访问还是明文,后续浏览器接收到服务器响应头中的Strict-Transport-Security,就会把域名加入到hsts缓存中,然后才会在发送请求前将http内部转换成https),而不是先发送http,然后重定向到https,这样就能避免中途的302重定向URL被篡改。进一步提高通信的安全性。

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配置文件如下:

server {listen       443 ssl http2;server_name  zt.test.com;<br>    #配置ssl相关信息ssl on;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_dhparam /etc/nginx/conf.d/ssl/dhparam.pem;ssl_certificate     /etc/nginx/conf.d/ssl/test.com.crt;ssl_certificate_key /etc/nginx/conf.d/ssl/test.com.key;#把下面的注释掉就可以了#add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; preload";access_log  /var/log/nginx/zt.test.log main;set $web_url $host;location / {proxy_pass         http://ztweb.server;proxy_set_header   Host             $host;proxy_set_header   X-Real-IP        $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;set $domain default;}
}

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

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

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

0×03. Strict-Transport-Security的一些不足

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

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

学而不思则罔,思而不学则殆

nginx配置Strict Transport Security相关推荐

  1. HTTP Strict Transport Security (HSTS) in ASP.NET Core

    本文是<2020年了,再不会HTTPS就老了>的后篇,本文着重聊一聊HTTP Strict Transport Security协议的概念和应用. 启用 HTTPS 还不够安全 现在很多站 ...

  2. 为什么我们要使用HTTP Strict Transport Security?

    HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. 0×01. Freebuf百科: ...

  3. 渗透测试web未设置http头 Strict Transport Security

    HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. 0×01. Freebuf百科: ...

  4. html增加hsts头,开启HSTS(HTTP Strict Transport Security)

    开启HSTS(HTTP Strict Transport Security) HSTS(HTTP Strict Transport Security) 的作用就是,当你使用了一次之后,浏览器就会记住这 ...

  5. HTTP Strict Transport Security 导致的307 http自动跳转https

    今天遇到一个 由于nginx设置了header:Strict-Transport-Security导致url自动跳转为https的问题. 记录如下: 开发者模式下可以看到307及hsts类提示信息 可 ...

  6. HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一)

    // HTTP strict transport security (HSTS) is defined in // http://tools.ietf.org/html/ietf-websec-str ...

  7. chrome去除htst_HTTP Strict Transport Security实战详解

    HTTP Strict Transport Security (通常简称为HSTS) 是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源, 禁止HTTP方式. 0×01. Freebuf百科: ...

  8. nginx配置https协议

    配置方法如下,需要注意的地方是即使有一个listen 80了,还是需要加一个listen 443的配置项,在server块里面添加如下配置即可(我用的腾讯云的com.cn域名) listen 443 ...

  9. SpringBoot配置属性之Security

    序 spring security是springboot支持的权限控制系统. security.basic.authorize-mode 要使用权限控制模式. security.basic.enabl ...

  10. ssms没有弹出服务器验证_Nginx服务器负载均衡及生成ssl密钥对、Nginx配置ssl操作示例...

    概述 当用户访问nginx定制好的域名时,nginx通过转发到几台真实的站点,通过upstream实现 [root@centos7 vhost]# vim /usr/local/nginx/conf/ ...

最新文章

  1. 判定是否互为字符重排
  2. [原创]位运算符实现两个整数加法运算
  3. spring boot application.properties 属性详解
  4. leetcode383. 赎金信(两种做法)
  5. 推荐一个PPT副业,日赚800-1000元
  6. CodeForces 19E 仙女fairy
  7. Open Cascade 读取STEP、STL
  8. 从5毛到3块,涪陵榨菜是怎样让我们吃不起的?
  9. python之excel数据读取与分类累加
  10. 程序员的专属表情包,看了吓一跳
  11. [论文阅读] Structure-Consistent Weakly Supervised Salient Object Detection with Local Saliency Coherence
  12. 数据结构期末考试——选择题
  13. 【可信计算】第九次课:TPM密码资源管理
  14. selenium之action_chains模块(鼠标操作)
  15. csdn 如何去掉图片水印
  16. MyBatis学习——分步查询与延迟加载
  17. 冷知识:以前飞机上不能玩手机是因为山寨机太多?
  18. 董宇辉,新东方以及凤凰卫视
  19. html中加入emjio表情,html与emoji表情,
  20. 风云崛起之节点电压法

热门文章

  1. IP地址介绍,子网划分(VLSM),构造超网(CIDR) 详解
  2. 计算机检索系统常用的运算符,计算机信息检索过程中常用的检索表达式 计算机信息检索系统.doc...
  3. Tightvncserver 连接树莓派的方法及步骤
  4. 学习TypeScript4这一篇就够了
  5. 小程序Dialog弹出窗
  6. php选课删除选课成绩统计,高校选修课平时成绩管理系统
  7. 解决了Office2007向程序发送命令时出现错误 的问题
  8. I/O流(万流齐发、万流归宗) 本章目标: 掌握 讲  解:★★★★★ http://kuaibao.qq.com/s/20200527A0LR3000?refer=spider 1.I/O流概
  9. 轻量级配置的登录管理器选择---Silm[zt]
  10. 【秋招】搜狐游戏_数据分析岗_面试题整理