如何使用HTTPS防止流量劫持

时间:2023-02-26 13:31:58

何为流量劫持

前不久小米等六家互联网公司发表联合声明,呼吁运营商打击流量劫持。流量劫持最直观的表现,就是网页上被插入了一些乱七八糟的广告/弹窗之类的内容。比如这样:

如何使用HTTPS防止流量劫持

网页右下角被插入了游戏的广告。

流量劫持总体来说属于中间人攻击(Man-in-the-Middle Attack,MITM)的一种,本质上攻击者在通信两端之间对通信内容进行嗅探和篡改,以达到插入数据和获取关键信息的目的。目前互联网上发生的流量劫持基本是两种手段来实现的:

  • 域名劫持:通过劫持掉域名的 DNS 解析结果,将 HTTP 请求劫持到特定 IP 上,使得客户端和攻击者的服务器建立 TCP 连接,而非和目标服务器直接连接,这样攻击者就可以对内容进行窃取或篡改。在极端的情况下甚至攻击者可能伪造目标网站页面进行钓鱼攻击。
  • 直接流量修改:在数据通路上对页面进行固定的内容插入,比如广告弹窗等。在这种情况下,虽然客户端和服务器是直接建立的连接,但是数据内容依然可能遭到野蛮破坏。

能够实施流量劫持的根本原因,是 HTTP 协议无法对通信对方的身份进行校验以及对数据完整性进行校验。如果能解决这个问题,则流量劫持将无法轻易发生。

关于流量劫持的更多危害案例,可以参考:如何看待小米等联合声明:呼吁运营商严格打击流量劫持?( https://www.zhihu.com/question/38861118 )

HTTPS 如何防止劫持

如何使用HTTPS防止流量劫持

HTTPS,是 HTTP over SSL 的意思,提到 HTTPS 就不得不先简单描述一下 SSL/TLS 协议。SSL 协议是 Netscape 在 1995 年首次提出的用于解决传输层安全问题的网络协议,其核心是基于公钥密码学理论实现了对服务器身份认证、数据的私密性保护以及对数据完整性的校验等功能。1999 年 IETF 将 SSL 3.0 标准化,是为 TLS 1.0 版本,目前 TLS 协议的最新版本是 1.2 版本,TLS 1.3 标准正在制定中。为了方便,下文将 SSL/TLS 协议都简称为 SSL 协议。

SSL 协议在 HTTP 请求开始之前增加了握手的阶段,其粗略流程如下图所示:

如何使用HTTPS防止流量劫持

  • 在 SSL 握手阶段,客户端浏览器会认证服务器的身份,这是通过“证书”来实现的,证书由证书权威(CA)为某个域名签发,可以理解为网站的身份证件,客户端需要对这个证件进行认证,需要确定该证书是否属于目标网站并确认证书本身是否有效。最后在握手阶段,通信的双方还会协商出一个用于加密和解密的会话密钥。
  • SSL 握手阶段结束之后,服务器和客户端使用协商出的会话密钥对交互的数据进行加密/解密操作,对于 HTTP 协议来说,就是将 HTTP 请求和应答经过加密之后再发送到网络上。

由此可见,因为 SSL 协议提供了对服务器的身份认证,所以 DNS 劫持导致连接错误服务器的情况将会被发现进而终止连接,最终导致 DNS 挟持攻击无法实现。此外 SSL 协议还提供数据的加密和完整性校验,这就解决了关键信息被嗅探以及数据内容被修改的可能。

如何部署 HTTPS

要将网站进行 HTTPS 支持以达到防劫持的效果,首先需要的是为网站的域名搞一张证书。这个证书必须是由知名 CA 所签发的,这是因为知名 CA 的根证书广泛的存在于大多数浏览器和操作系统中,因此可以被客户端用来校验网站证书是否合法。

传统 CA 的证书签发流程大体相同,基本上都是根据证书认证的级别,进行一系列不同流程的认证,然后认证通过后申请者缴纳相应的费用就可以或得到证书。这个流程相对比较繁琐,尤其是对于个人和小型网站管理者来说搞起来也确实麻烦。这里推荐一种新型的方法——使用 Let’s Encrypt 的自动化服务获取免费的证书。

使用 Let’s Encrypt 的自动化服务获取免费的证书

Let’s Encrypt 项目是由 ISRG 提供的免费 CA 服务,其主要目的是减少证书获取的难度,将证书的签发/续签/作废等操作进行自动化处理。Let’s Encrypt 的使用方法非常简单,按照文档中步骤操作即可。如需进一步了解如何使用 Let’s Encrypt 自动获取免费证书,可以参考:用 Let’s Encrypt 获取免费证书 (

https://www.paulyang.cn/blog/archives/39?spm=5176.blog2666.yqblogcon1.11.i02BAh )

在获得到证书(以及对应的私钥)之后,主要有如下几种方法来使用:

  1. 直接在 Web 服务器上部署证书和私钥,相关 apache 或 nginx 都有大量的文档说明,在此就不赘述了。
  2. 在服务器集群的接入层/反向代理处部署证书和私钥,例如阿里云的 CDN, SLB 和高防 IP 等产品均提供 HTTPS 支持,可以直接上传证书和私钥就可以实现网站的 HTTPS 改造。

阿里云的 HTTPS 支持

阿里巴巴在 2015 年的双 11 期间,成功的使用了全站范围(包括淘宝、天猫等核心电商域名)的 HTTPS 为广大买家提供安全的购物体验,这种体量的 HTTPS 服务在业界也极为少见。阿里云在进行电商业务的 HTTPS 改造时,在密码学、SSL/TLS 协议以及 PKI 体系等领域进行了一系列的优化和创新,并在此过程中积累了大量宝贵的经验。

阿里云做为底层基础设施的提供者,在阿里全站 HTTPS 化的过程中提供了大量的技术支撑,阿里云的 CDN 和 SLB 等产品在 HTTPS 的加速以及卸载等环节发挥了重要的作用。因此希望能将在淘宝/天猫业务上积累的 HTTPS 领域的经验和成果,借助阿里云的平台,让更多人来使用,籍此希望跟多的互联网流量能够 HTTPS 化,让流量劫持再无可能。

如何使用HTTPS防止流量劫持的更多相关文章

  1. 【流量劫持】躲避 HSTS 的 HTTPS 劫持

    前言 HSTS 的出现,对 HTTPS 劫持带来莫大的挑战. 不过,HSTS 也不是万能的,它只能解决 SSLStrip 这类劫持方式.但仔细想想,SSLStrip 这种算劫持吗? 劫持 vs 钓鱼 ...

  2. 【流量劫持】SSLStrip 的未来 —— HTTPS 前端劫持

    前言 在之前介绍的流量劫持文章里,曾提到一种『HTTPS 向下降级』的方案 -- 将页面中的 HTTPS 超链接全都替换成 HTTP 版本,让用户始终以明文的形式进行通信. 看到这,也许大家都会想到一 ...

  3. 关于全站https必要性http流量劫持、dns劫持等相关技术

    关于全站https必要性http流量劫持.dns劫持等相关技术 微信已经要求微信支付,申请退款功能必须12月7号之前必须使用https证书了(其他目前为建议使用https),IOS也是2017年1月1 ...

  4. 拒绝流量劫持,全面使用 HTTPS!

    最近收到数个 BootCDN 用户的反馈:某些地区的宽带运营商劫持了部分 BootCDN 上的文件,并篡改文件加入了广告代码. 这种方式的流量劫持属于中间人攻击(Man-in-the-Middle A ...

  5. WiFi流量劫持—— JS脚本缓存投毒

    在上一篇<WiFi流量劫持—— 浏览任意页面即可中毒>构思了一个时光机原型,让我们的脚本通过HTTP缓存机制,在未来的某个时刻被执行,因此我们可以实现超大范围的入侵了. 基于此原理,我们用 ...

  6. HTTPS-能否避免流量劫持

    流量劫持是什么? EtherDream在一篇科普文章<>中详细介绍了流量劫持途径和方式. 流量劫持是一种古老的攻击方式,比如早已见惯的广告弹窗等,很多人已经对此麻木,并认为流量劫持不会造成 ...

  7. Linux-某电商网站流量劫持案例分析与思考

    [前言] 自腾讯与京东建立了战略合作关系之后,笔者网上购物就首选京东了.某天在家里访问京东首页的时候突然吃惊地发现浏览器突然跳到了第三方网站再回到京东,心里第一个反应就是中木马了. 竟然有这样的事,一 ...

  8. Web如何应对流量劫持?

    虽然互联网经过多年的发展,可是网站使用的底层协议仍是 HTTP,HTTP 作为一种明文传播协议,所有的传输数据都是明文,我们都知道在通信中使用明文(不加密) 内容可能会被窃听,同时网站存在被劫持的风险 ...

  9. Istio 流量劫持过程

    开篇 Istio 流量劫持的文章其实目前可以在servicemesher社区找到一篇非常详细的文章,可查阅:Istio 中的 Sidecar 注入及透明流量劫持过程详解.特别是博主整理的那张&quot ...

随机推荐

  1. python获取父类的子类(遍历,递归),并循环执行所有子类的某一方法

    前言 换了新工作,踏足于python语言的开发,也把自己的学习过程记录下来. 一,递归获取某一父类的所有子类 all_subclasses = {'0': '0'} def get_all_class ...

  2. Android环境变量配置

    第一步: 把这些东西全部准备好!然后jdk怎么安装我相信大家都知道.安装好jdk之后,我们来配置环境变量. 我的电脑—右键—属性—高级系统设置—环境变量 JAVA_HOME环境变量.它指向jdk的安装 ...

  3. Aoite 系列&lpar;02&rpar; - 超动感的 Ioc 容器

    Aoite 系列(02) - 超动感的 Ioc 容器 Aoite 是一个适于任何 .Net Framework 4.0+ 项目的快速开发整体解决方案.Aoite.Ioc 是一套解决依赖的最佳实践. 说 ...

  4. 04&lowbar;Swift2基础之类型安全和类型推测&plus;字面量&plus;类型别名

    1. 类型安全和类型推测 1> 类型安全 Swift 是一个 _类型安全(type safe)_ 的语言.类型安全的语言可以让你清楚地知道代码要处理的值的类型.如果你的代码需要一个`String ...

  5. zjuoj 3608 Signal Detection

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3608 Signal Detection Time Limit: 2 Sec ...

  6. centos7&period;2上实践cgoup

    基本介绍 CGroups 是一种对进程资源管理和控制的统一框架,它提供的是一种机制,而具体的策略(Policy)是通过子系统(subsystem)来完成的.子系统是CGroups对进程组进行资源控制的 ...

  7. 《A Tour of PostgreSQL Internals》学习笔记——系统表和数据类型

    上周末学习了<A Tour of PostgreSQL Internals>的第一部分(View 1),今天我们继续打开书本,继续View 2 部分. View 2 Postgresql的 ...

  8. Oracle通过序列&plus;触发器实现主键自增

    接触oracle没多久,在建表的时候发现还不会如何设置主键自动增长.和mysql的设置为AUTO_INCREMENT属性相比,要复杂很多,所以现在记录起来. 我使用的是序列+触发器的方式. 现在已经创 ...

  9. drupal 2006 mysql server has gone away

    在开发一个cms drupal网站时遇到了如上图的错误,几经百度谷歌,都一致说需要修改mysql的配置 max_allowed_packet参数,但是由于我买的是虚拟主机,并没有权限修改. 本来已经放 ...

  10. WCF使用Net&period;tcp绑定时候出现错误&colon;元数据包含无法解析的引用

    在WCF服务编程中,客户端添加引用服务时,出现如下错误: 元数据包含无法解析的引用:“net.tcp://192.168.1.105:1314/LoginService”. 套接字连接已中止.这可能是 ...