我们已经了解到HTTP协议具有相当优秀和方便的一面,然而HTTP并非只有好的一面,事物皆具有两面性,它也是有不足之处的,那么HTTP有哪些缺点呢?

窃听风险

由于HTTP本身不具备加密的功能,所以也无法做到对通信内容进行加密,即HTTP报文是使用明文方式发送的。
如果要问为什么通信时不加密是一个缺点,这是因为,HTTP的底层是基于TCP/IP协议,而按TCP/IP协议簇的工作机制,通信内容在所有通信线路上都有可能造到窃听。
所谓互联网,是由能连通到全世界的网络组成的。无论世界哪个角落的服务器在和客户端通信时,在此通信线路上的某些网络设备,光缆,计算机等都不可能是个人的私有物,所以不排除某个环节中会遭到恶意窃听的行为。
即使已经过加密处理的通信,也会被窥视到通信内容,这点和未加密的通信是相同的。只是说如果通信经过加密,就有可能让人无法破解报文信息的含义,但加密处理后的报文信息本身还是会被看到的。如下图:
 
窃听相同段上的通信并非难事。只需要收集在互联网上流动的数据包就行了。对于收集来的数据包的解析工作,可交给那些抓包工具。下面的图片示例就是被广泛使用的抓包工具Wireshark,它可以获取HTTP的请求和响应的内容,并对其进行解析。像使用GET方法发送请求,响应返回了200 OK,查看HTTP响应报文的全部内容等一系列的事情都可以做到。如下图:

篡改风险

由于HTTP协议无法证明通信报文的完整性,因此,在请求或响应送出之后直到对方接到之前的这段时间内,即使请求或响应的内容遭到篡改,也没有办法获悉。
换句话说,没有任何办法确认,发出的请求或响应和接收到的请求或响应是前后相同的。如下图:
比如,从某个Web网站上下载内容,是无法确定客户端下载的文件和服务器上存放的文件是否前后一致,文件内容在传输途中可能已经被篡改为其它的内容,即使内容真的已改变,作为接收方的客户端也是觉察不到的。像这样,请求或响应在传输中,遭到攻击者拦截并篡改内容的攻击称为中间人攻击。如下图:

冒充风险

在HTTP协议通信时,由于不存在确认通信方的处理步骤,任何人都可以发起请求,另外,服务器只要接收到请求,不管对方是谁都会返回一个响应(但也仅限于发送端的IP地址和端口号没有被Web服务器设定限制访问的前提下)。如下图:
HTTP协议的实现本身非常简单,不论是谁发送过来的请求都会返回响应,因此不确认通信方,会存在以下安全隐患:
  • 无法确定请求发送至目标的Web服务器是否是按真实意图返回响应的那台服务器,有可能是已伪装的Web服务器。
  • 无法确定响应返回到客户端是否按真实意图接收响应的那个客户端,有可能是已伪装的客户端。
  • 无法确定正在通信的对方是否具备访问权限。因为某些Web服务器上保存着重要的信息,只想发给特定用户通信的权限。
  • 无法判定请求来自何方,出自谁手。
  • 即使是无意义的请求也会照单全收,无法阻止海量请求下的DoS攻击。

安全通信的四个原则

一般我们认为安全的通信必须包括以下四个原则:
  1. 机密性。对数据进行加密,解决窃听风险,因为即使被中间人窃听,由于数据是加密的,他也拿不到明文。
  2. 完整性。数据在传输过程中没有被篡改,不多不少,保持原样,中途如果哪怕改了一个标点符号,接收文也能识别出来,从而判定接收报文不合法。
  3. 身份认证。确认对方的真实身份,即证明【你是妈】的问题,解决了冒充风险,用户不用担心访问的是某宝结果却在和钓鱼网站通信的问题。
  4. 不可否认。即不可否认已经发生的行为,比如小明向小红借了100元,但没打借条,或者打了借条但没有签名,就会造成小红的资金损失。
 
那么因为HTTP协议有窃听风险,篡改风险和冒充风险,同时网络安全通信有四个原则,所以是时候请出HTTPS了。
 
针对SSL免费证书的不足和痛点,我开发并开源了一个平台:华迅FreeCert平台,支持免费的SSL证书,通配符证书的申请和托管,配合自动部署工具可以实现证书的自动化更新和部署,真正做到一次申请终身自动更新和自动部署,感兴趣的同学可以试一下!
 

详解SSL证书系列(7)HTTP的三大缺点的更多相关文章

  1. SSL/TLS协议详解(中)——证书颁发机构

    本文转载自SSL/TLS协议详解(中)--证书颁发机构 导语 上一篇中,我们讨论了关于Diffie Hellman算法的SSL/TLS密钥交换.我们最终认为需要第三方来验证服务器的真实性,并提出了证书 ...

  2. java ssl https 连接详解 生成证书 tomcat keystone

    java ssl https 连接详解 生成证书 我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over ...

  3. java ssl https 连接详解 生成证书

    我们先来了解一下什么理HTTPS 1. HTTPS概念 1)简介 HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全 ...

  4. TLS/SSL 协议详解 ssL 、TLS 1.0、TLS 1.1、TLS 1.2的了解

    TLS 1.0 RFC http://www.ietf.org/rfc/rfc2246.txt TLS 1.1 RFC http://www.ietf.org/rfc/rfc4346.txt TLS ...

  5. [No0000126]SSL/TLS原理详解与WCF中的WS-Security

    SSL/TLS作为一种互联网安全加密技术 1. SSL/TLS概览 1.1 整体结构 SSL是一个介于HTTP协议与TCP之间的一个可选层,其位置大致如下: SSL:(Secure Socket La ...

  6. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

  7. C#进阶系列——WebApi 接口参数不再困惑:传参详解

    前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...

  8. 【转】C#进阶系列——WebApi 接口参数不再困惑:传参详解

    原文地址:http://www.cnblogs.com/landeanfen/archive/2016/04/06/5337072.html 阅读目录 一.get请求 1.基础类型参数 2.实体作为参 ...

  9. Java 8系列之Stream的基本语法详解

    本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...

  10. [转]C#进阶系列——WebApi 接口参数不再困惑:传参详解

    本文转自:http://www.cnblogs.com/landeanfen/p/5337072.html#_label1_2 阅读目录 一.get请求 1.基础类型参数 2.实体作为参数 3.数组作 ...

随机推荐

  1. NAND Flash 寿命算法——Wear leveling

    由于闪存的可擦写次数是有限的,当某些数据被频繁修改时容易导致对应的块很快被耗尽使用寿命,从而导致整块盘无法使用,所以需要有一种技术来将这些块的擦写均摊一下,延长使用寿命. 首先看几个相关的基本概念: ...

  2. Java集合框架学习(六) LinkedList详解

    LinkedList介绍 ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同. LinkedList是采用链表的方式来实现 ...

  3. Innodb 存储引擎表

    目录 索引组织表 Innodb逻辑存储结构 表空间 段 区 页 行 Innodb 行记录格式 Compact Redundant 行溢出数据 Compressed 和 Dynamic 行记录格式 ch ...

  4. 新零售SaaS架构:什么是订单履约系统?

    什么是订单履约系统? 订单履约系统用来管理从接到销售订单,到把货品送到客户手中的整个业务过程.它是上游交易(如销售和客户下单环节)和下游仓储配送(如库存管理.物流)之间的桥梁,确保信息流的顺畅和操作的 ...

  5. .Net 6 WebAPI 使用JWT进行 授权认证配置

    .Net 6 WebAPI 使用JWT进行 授权认证 1.安装组件(Nuget) Microsoft.AspNetCore.Authentication.JwtBearer 2.Program.cs ...

  6. Hi3516开发笔记(九):在QtCreator开发环境中引入海思sdk的bsp包,运行显示Qt界面

    前言   之前启动Qt界面程序失败了,是因为需要引入HiSDK的BSP中的HiMPP,并对HiMPP进行初始化设置.   在sdk中查询海思SDK头文件和库       在Qt中调用海思BSP   在 ...

  7. 类型注解Callable

    from collections.abc import Callable """ Callable[[ParamType1, ParamType2], ReturnTyp ...

  8. 国内如何快速访问GitHub

    1.国内如何快速访问gibhub -FQ的方法无非就是用软件,这种就不介绍了 -本次介绍的是修改本地系统主机hosts文件,绕过国内dns解析,达到快速访问github 打开https://tool. ...

  9. 02-Redis系列之-架构和高级API的使用

    通用部分 通用命令 # 1-keys # 打印出所有key keys * # 打印出所有以n开头的key keys n* # 打印出所有以nam开头,第四个字母是a到z的范围 keys nam[a-z ...

  10. Django重点

    Django 简述python三大主流web框架 """ django 大而全,类似于航空母舰 但是有时候过于笨重 flask 小而精,类似于游骑兵(单行代码就可以起一个 ...