在HTTP协议中有可能存在信息窃听或者身份伪装等问题,使用HTTPS协议通信机制可以有效地防止这些问题。

1 HTTP协议的缺点

  • 通信使用明文,内容可能被窃听
  • 不用验证通信方的身份,因此可能会遭遇伪装
  • 无法证明报文的完整性,可能已经被人恶意篡改了哦

1.1 通信使用明文被窃听

  按照TCP/IP协议族的工作机制,通信内容在所有的通信线路上都有可能遭到窥视。即便是加密处理后的通信,也会被窥视到通信的内容,但是加密后,可能让人无法破解报文信息的含义,但是加密后的报文信息本身还是会被看到的。这里有两种不同形式的加密方式,通信加密和内容加密。

1.1.1 通信加密

  HTTP协议中没有加密机制,但是可以通过可SSL【Secure Socket Layer —— 安全套接字层 注:TLS前身】或者TLS【Transport layer Security——安全传输层协议】的组合使用,来加密通信内容。使用SSL建立安全的通信线路后,就可以在这条线路上进行HTTP通信了。

1.1.2 内容加密

  只对HTTP协议传输的内容本身进行加密。即把HTTP报文中的内容进行加密处理,报文的首部不加密,报文主体会加密。

1.2 不验证通信方的身份就可能会遭遇到伪装

  HTTP协议实现非常简单,不论是谁发送过来的请求都会返回响应【不考虑Web服务器限制访问的情况】。因此会存在以下几种隐患:

  • 无法确定请求发送至目标的Web服务器是否是按照真实意图返回响应的服务器,即服务器不是自己请求的那台服务器
  • 无法确认返回响应抵达的客户端是不是发送请求的客户端
  • 无法确认正在通信的对方是否具备访问权限
  • 无法拒绝海量请求下的Dos攻击

  因此,为了解决这些问题,有以下几种方法。

1.2.1 查明证书

  SSL不仅提供了加密处理的功能,还是用了一种被称为证书的手段,可以用于确认通信的双方。证书需要由值得信任的三方进行颁发,用以证明通信双方是真实存在的。

  

1.3 无法证明报文的完整性,可能被篡改

  请求或者响应在传输途中,遭遇到攻击者拦截并且篡改内容的攻击称为中间人攻击【MITM】。

1.3.1 如何防止篡改

  • MD5和SHA-1等根据散列值进行校验的方法,不靠谱,

2 HTTP + 加密 + 认证 + 完整性保护 = HTTPS

   HTTPS其实就是先和SSL进行通信,再由SSL和TCP进行通信

2.1 相互交换密钥的公开密钥加密技术

  加密和解密使用同一个密钥的方式成为共享密钥加密,也被叫做对称密钥加密。可是密钥要怎么发送呢,既然密钥都能安全发送了,是不是数据也可以不通过加密就可以安全发送呢?

2.2 使用两把密钥的公开密钥加密技术

  非对称加密使用两把密钥,一把是公钥,一把是私钥。使用非对称加密的双方,发送方使用公钥对数据进行加密,接收方使用私钥进行解密。

2.3 HTTPS使用混合加密技术

  1. 使用非对称加密发送需要使用的对称密钥
  2. 使用对称密钥对信息进行加密

2.4 证明公开密钥正确性的证书

  非对称加密还存在一个问题,那就是无法证明公开密钥的正确性。比如,如果打算和某台服务器建立公开密钥加密方式下的通信时,怎样证明收到的公开密钥就是服务器一开始发行的公开密钥呢?

  为了解决这个问题,可以使用由数字证书认证机构和其相关机关颁发的公开密钥证书。服务器可以将这份公钥证书发送给客户端,以进行公开密钥加密方式通信。

3 HTTPS通信步骤

  1. 客户端发送Client Hello报文开始SSL通信。报文中包含了客户端支持的SSL指定版本,加密组件列表
  2. 服务端可以进行SSL通信时,会以Server Hello报文进行应答
  3. 之后服务器发送Certificate报文,报文中包含公开密钥证书
  4. 服务器发送Server Hello done报文通知客户端,最初阶段的SSL握手部分结束
  5. SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应。报文中包含通信加密中使用的一种Pre-master secret的随机密码串,已用公开密钥进行加密
  6. 客户端发送Change Cipher Spec报文,提示服务器,之后的通信会采用Pre-master secret密钥加密
  7. 客户端发送Finished报文,包含全部报文的整体校验值,这次握手是否成功,需要以服务端是否可以正确解密该报文作为判定标准
  8. 服务端发送Change Cipher Spec报文
  9. 服务端发送Finished报文
  10. 服务端和客户端的Finished报文交换结束后,SSL连接建立完成。开始应用层协议通信,发送HTTP请求
  11. 发送HTTP响应
  12. 客户端断开连接

HTTPS简单介绍的更多相关文章

  1. SSL&HTTPS简单介绍

    这篇是最近看SSL和HTTPS的一个简单性总结,其中内容大部分都是参考网络上的内容,自己归纳整理了下. SSL介绍 HTTPS介绍 HTTP请求数据工作流程: l  用户在浏览器中输入网址,并告诉浏览 ...

  2. Https系列之一:https的简单介绍及SSL证书的生成

    Https系列会在下面几篇文章中分别作介绍: 一:https的简单介绍及SSL证书的生成二:https的SSL证书在服务器端的部署,基于tomcat,spring boot三:让服务器同时支持http ...

  3. 转载 mvc:message-converters简单介绍 https://www.cnblogs.com/liaojie970/p/7736098.html

    mvc:message-converters简单介绍 说说@ResponseBody注解,很明显这个注解就是将方法的返回值作为reponse的body部分.我们进一步分析下这个过程涉及到的内容,首先就 ...

  4. iOS开发网络篇—简单介绍ASI框架的使用

    iOS开发网络篇—简单介绍ASI框架的使用 说明:本文主要介绍网络编程中常用框架ASI的简单使用. 一.ASI简单介绍 ASI:全称是ASIHTTPRequest,外号“HTTP终结者”,功能十分强大 ...

  5. iOS开发数据库篇—FMDB简单介绍

    iOS开发数据库篇—FMDB简单介绍 一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来 ...

  6. 攻城利器 —— Carthage简单介绍

    01 Carthage简单介绍 主页:https://github.com/Carthage/Carthage.git 作者:Justin Spahr-Summers等 版本:0.18 目标:用最简单 ...

  7. Linux curl使用简单介绍

    在两台新搬迁的微信服务器上执行命令: curl -H "Content-Type: application/json" -d '{"partner_no":&q ...

  8. iOS沙盒简单介绍

    先简单介绍一下什么是沙盒:你可以简单理解成为一个目录,这个目录的改动不会对操作系统造成任何损失.(这里也有一点点介绍) 看看苹果的沙盒目录: 再附一张苹果官方的图 一个iOS app操作都是在自己的沙 ...

  9. Redis的简单介绍及在Windows下环境搭建

    简单介绍 1,Redis是什么 最直接的还是看官方的定义吧. Redis is an open source (BSD licensed), in-memory data structure stor ...

随机推荐

  1. Python工业互联网监控项目实战3—websocket to UI

    本小节继续演示如何在Django项目中采用早期websocket技术原型来实现把OPC服务端数据实时推送到UI端,让监控页面在另一种技术方式下,实时显示现场设备的工艺数据变化情况.本例我们仍然采用比较 ...

  2. L20 梯度下降、随机梯度下降和小批量梯度下降

    airfoil4755 下载 链接:https://pan.baidu.com/s/1YEtNjJ0_G9eeH6A6vHXhnA 提取码:dwjq 梯度下降 (Boyd & Vandenbe ...

  3. A Bug's Life POJ 2492

    D - A Bug's Life 二分图 并查集 BackgroundProfessor Hopper is researching the sexual behavior of a rare spe ...

  4. Android内存优化—dumpsys meminfo详解

    原创置顶 不死鸟JGC 最后发布于2018-12-24 14:19:28 阅读数 3960 收藏展开dumpsys 介绍Dumpsys用户系统诊断,它运行在设备上,并提供系统服务状态信息 命令格式: ...

  5. self不明白什么意思,我来帮助你了解self的含义

    先看下面这段代码 # 用函数模仿类def dog(name, gender): def jiao(dog1): print('%s汪汪叫' % dog1["name"]) def ...

  6. Maven+JSP+SSM+Mysql+C3P0实现的学生管理系统

    项目简介 项目来源于:https://gitee.com/wu_yun_long/student_management_system 本系统是基于Maven+JSP+SSM+Mysql+C3P0实现的 ...

  7. spark 集群优化

    只有满怀自信的人,能在任何地方都怀有自信,沉浸在生活中,并认识自己的意志. 前言 最近公司有一个生产的小集群,专门用于运行spark作业.但是偶尔会因为nn或dn压力过大而导致作业checkpoint ...

  8. Nginx安装、多域名访问

    nginx web服务 apache iis django web框架 lvs 负载均衡 章文嵩博士 vue 尤雨溪 Tengine F5 硬件负载 A10 安装 ``` wget http://ng ...

  9. Java 添加、隐藏/显示、删除PDF图层

    本文介绍操作PDF图层的方法.可分为添加图层(包括添加线条.形状.字符串.图片等图层).隐藏或显示图层.删除图层等.具体可参考如下Java代码示例. 工具:Free Spire.PDF for Jav ...

  10. 22.Java面试学习平台-整合OSS对象存储

    SpringCloud实战项目全套学习教程连载中 PassJava 学习教程 简介 PassJava-Learning项目是PassJava(佳必过)项目的学习教程.对架构.业务.技术要点进行讲解. ...