我们已经了解到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. 多层PCB线路板制作流程

    PCB制作第一步是整理并检查pcb多层线路板布局(Layout).电路板制作工厂收到PCB设计公司的CAD文件,由于每个CAD软件都有自己独特的文件格式,所以深圳PCB板厂会转化为一个统一的格式Ger ...

  2. Python 中global 关键字理解

    Python中的global关键字,你了解吗? 前言 今天来了解下 Python 中的 global 关键字. Python变量的作用域 实战案例演示之前,先要了解下 Python 的作用域. Pyt ...

  3. Reactive 简介

    1. 概念 Reactive 非常适合低延迟.高吞吐量的工作负载. Reactive Processing 是一种范式(规范),它使开发人员能够构建非阻塞的.异步的应用程序,这些应用程序能够处理背压( ...

  4. Spring Security实现JDBC用户登录认证

    在搭建博客后端服务框架时,我采用邮件注册+Spring Security登录认证方式,结合mysql数据库,给大家展示下具体是怎么整合的. 本篇是基于上一篇:spring boot实现邮箱验证码注册 ...

  5. UTF-8 的理解

    举个简单的例子: Unicode 只是一个业界标准,具体一个字符占多少字节,取决于编码方式,包括 UTF-8 UTF-16 GB2312 等 "汉" 在 UTF-8 中占到 3 个 ...

  6. Dubbo使用APISIX作为网关

    为什么使用网关 Dubbo服务本身没有暴露HTTP接口,客户端(如:Web,APP)无法直接调用其提供的方法. 而APISIX可以通过dubbo-proxy插件为Dubbo服务提供外部访问的HTTP接 ...

  7. django项目中使用nginx+fastdfs上传图片和使用图片的流程

    自定义文件存储类 1.先弄清楚django中默认的上传文件存储FileSystemStorage类 https://docs.djangoproject.com/zh-hans/2.2/ref/fil ...

  8. ubuntu 中 docker 每次都输入 sudo 命令

    查看用户组及成员 sudo cat /etc/group | grep docker 可以添加docker组 sudo groupadd docker 添加用户到docker组 sudo gpassw ...

  9. 【Azure 事件中心】Spring Cloud Stream Event Hubs Binder 发送Event Hub消息遇见 Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially 异常

    问题描述 开发Java Spring Cloud应用,需要发送消息到Azure Event Hub中.使用 Spring Cloud Stream Event Hubs Binder 依赖,应用执行一 ...

  10. 没想到,JDBC 驱动会偷偷修改 sql_mode 的会话值

    最近碰到一个 case,值得分享一下. 现象就是一个 update 操作,在 mysql 客户端中执行提示 warning,但在 java 程序中执行却又报错. 问题重现 mysql> crea ...