简单聊聊Https的来龙去脉

简单聊聊Https的来龙去脉

  • Http 通信具有哪些风险
  • Https = Http + SSL/TLS
  • 对称加密 和 非对称加密
  • 数字证书
    • 数字证书的申请
    • 数字证书怎么起作用
  • Https工作流程
  • 一定需要Https吗?


Http 通信具有哪些风险

  • 使用明文通信,通信内容可能会被监听
  • 不验证通信双方身份,因此可能会遭遇伪装
  • 无法验证报文完整性,可能会遭到中间人攻击,从而篡改请求和响应报文中的内容

Https = Http + SSL/TLS

Http 协议直接和TCP进行通信,而 Https 在 Http 和 Tcp 之间加了一层 SSL 实现加密传输 :
在这里插入图片描述
SSL ( Secure Socket Layer ) 安全套接层 是一种密码通信框架,于1995年发布了3.0版本,而TLS(Transport Layer Security)传输层安全是在SSL 3.0基础上设计的协议,对SSL的安全性进行增强,相当于SSL的后续版本。

SSL是一个独立的协议,不只有Http可以使用,其他应用层协议如果需要加密支持都可以使用,比如FTP,SMTP等都可以使用SSL来加密。


对称加密 和 非对称加密

常用的加密算法分为两类:

  • 对称加密
  • 非对称加密

对称加密: 加密和解密使用同一把秘钥,服务器和客户端在通信初始阶段需要协商秘钥,该阶段存在窃听导致秘钥泄露的风险。

在这里插入图片描述

对称加密: 客户端和服务端均拥有一个公钥和私钥,公钥可以对外暴露,而私钥只有自己可见;使用公钥加密的信息,只有对应的私钥才能破解,反过来,使用私钥加密的消息,只有公钥才能解开。

在这里插入图片描述
对称加密可能存在公钥被拦截,然后被替换为中间人公钥的场景:

在这里插入图片描述
或者中间人不替换公钥,但是通过拦截客户端发送的消息,然后篡改,使用服务器公钥加密后再发送,此时服务器将收到错误的消息
在这里插入图片描述
非对称加密另一个缺点就是会比对称加密慢上很多。


数字证书

为了解决非对称加密过程中公钥传递的不安全性,人们想到了使用数字证书加上数字签名来解决这个问题。

数字证书的申请

在现实生活中,有一些专门的权威机构用来颁发证书,我们称之为认证中心 CA ,我们的服务器可以向这些CA来申请数字证书,申请流程大致如下:

  1. 服务器自己本地先生成一对秘钥,然后拿着自己的公钥以及其他信息(企业名称等)去CA申请数字证书。
  2. CA拿到这些信息后,会选择一种单向Hash算法(比如MD5)对这些信息进行加密,加密后的东西我们称之为摘要
  • 单向Hash算法有一种特点就是不可逆,只要原始内容有一点变化,加密后的结果都是不一样的(当然也存在很小的概率会发生重复 – 鸽巢原理),这样可以防止信息被篡改。
  • 比如用于检验IP报文是否完整的校验和,文件上传与下载对于的文件校验和,原理都是一样的
  1. 生成摘要后,CA还会用自己的私钥对摘要进行加密,摘要加密后的结果我们称之为数字签名
  2. 最后,CA 会将我们申请的信息(包含服务器公钥)和数字签名整合在一起,由此生成数字证书
  3. 然后CA把数字证书返回给服务器

在这里插入图片描述


数字证书怎么起作用

服务器在获取到数字证书后,服务器会将数字证书发送给客户端,客户端需要用CA的公钥解密数字证书并检验数字证书的合法性,所以,首要问题是如何拿到CA的公钥 ?

我们的电脑和浏览器已经内置了一部分权威机构的根证书,这些根证书包含了CA的公钥:
在这里插入图片描述
之所以是根证书,是因为现实生活中,认证中心也是分层级的,类似一个树状结构,虽然计算机中内置的是最顶级机构的根证书,但是根证书的公钥在子级也是适用的。

  1. 客户端用CA的公钥解密数字证书,如果解密成功说明证书来源于合法认证机构,解密成功后,客户端就可以拿到摘要。
  2. 然后,客户端按照和CA一样的Hash算法将申请信息(公钥,服务器域名,. . . ) 生成一份摘要,并和解密出来的那份做对比,如果相同说明内容完整,没有被篡改。
  3. 最后,客户端安全的从认证中心拿到服务器的公钥
  4. 随后就可以使用公钥和服务器进行安全的非对称加密通信了

在这里插入图片描述


Https工作流程

Https = Http + SSL/TLS , 说白了,无非就是在http上披了一层加密的外壳,Https的整个通信流程如下图所示:
在这里插入图片描述

  1. 客户端通过发送Client Hello报文开始通信,报文中包含客户端支持的SSL的指定版本,加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)
  2. 服务器可进行SSL通信时,会以Server Hello报文作为回答,和客户端一样,在报文中包含SSL版本以及加密组件,服务器加密组件内容是从接收到的客户端加密组件内容筛选出来的
  3. 服务器发送证书报文,报文中包含公开秘钥证书
  4. 最后,服务器发送Server Hello Done报文通知客户端,最初阶段的SSL握手协商部分结束
  5. SSL第一次握手结束后,客户端以Client Key Exchange报文作为回应,报文包含通信加密中使用的一种被称为Pre-master secret的随机密码串,该报文已用步骤3中的公开秘钥进行加密
  6. 接着客户端继续发送Change Cipher Spec报文,该报文会提示服务器,在此报文之后的通信会采用Pre-master secret秘钥进行加密
  7. 客户端发送Finished报文,该报文包含连接至今全部报文的整体校验值,这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准
  8. 服务器同样发送Change Cipher Spec报文
  9. 服务器同样发送Finished报文
  10. 服务器和客户端的Finished报文交换完毕后,SSL连接就算建立完成了
  11. 从此处开始进行应用层协议的通信,即发送Http请求,此时的通信过程会受到SSL的保护
  12. 最后,由客户端端口连接,断开连接时,发送close_notify报文
  13. 这步之后,再发送TCP FIN报文来关闭与TCP的通信

另外,在以上流程图中,应用层发送数据时会附加一种叫做MAC(Message Authentication Code)的报文摘要。MAC能够查知报文是否遭到篡改,从而保证报文的完整性。

经过上面的介绍,我们可以看出https先是利用数字证书保证服务器端的公匙可以安全无误的到达客户端。然后再用非对称加密安全的传递共享密匙,最后用共享密匙安全的交换数据。


一定需要Https吗?

Https那么的安全,是不是我们在什么场景下都要去使用https进行通信呢?答案是否定的。

  1. https虽然提供了消息安全传输的通道,但是每次消息的加解密十分耗时,消息系统资源。所以,除非在一些对安全性比较高的场景下,比如银行系统,购物系统中我们必须要使用https进行通信,其他一些对安全性要求不高的场景,我们其实没必要使用https。
  2. 使用https需要使用到数字证书,但是一般权威机构颁发的数字证书都是收费的,而且价格也是不菲的,所以对于一些个人网站特别是学生来讲,如果对安全性要求不高,也没必要使用https。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/116416.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安防视频监控/视频集中存储/云存储平台EasyCVR平台无法播放HLS协议该如何解决?

视频云存储/安防监控EasyCVR视频汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发、视频集中存储等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、…

超越编辑器的边界:掌握 Vs Code + Vim 最强操作技巧

看完这篇文章,从此刻开始你将成为一名真正的 “键盘侠” 作为程序员我们知道,当我们编写代码的时候频繁的操作鼠标是一件非常费劲的一件事,我们的很多时间都会浪费到去使用鼠标定位光标选中文本等等,要知道使用快捷键肯定是比我们…

学生信息管理系统MIS(前端)

改造HTML文件 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>学生信息管理系统MIS</title><!-- link在HTML文件中,引入外部的css文件 rel的值是固定写法,stylesheet样式表href用来指定样式表的位置--><lin…

volatile 关键字 与 CPU cache line 的效率问题

分析&回答 Cache Line可以简单的理解为CPU Cache中的最小缓存单位。目前主流的CPU Cache的Cache Line大小都是64Bytes。假设我们有一个512字节的一级缓存&#xff0c;那么按照64B的缓存单位大小来算&#xff0c;这个一级缓存所能存放的缓存个数就是512/64 8个。具体参见下…

jmeter单接口和多接口测试

最近接触到了多接口串联&#xff0c;接口串联的技术会在其他帖子有说明&#xff0c;其核心技术点就是通过正则表达式和变量来实现接口的关联。目前为止呢笔者用到的地方还只有一个&#xff0c;就是关于session保持的时候。但是看到很多资料都说测试过程中经常遇到b接口需要用a接…

微信小程序地图应用总结版

1.应用场景&#xff1a;展示公司位置&#xff0c;并打开第三方app&#xff08;高德&#xff0c;腾讯&#xff09;导航到目标位置。 &#xff08;1&#xff09;展示位置地图 uniapp官网提供了相关组件&#xff0c;uniapp-map组件 具体用法&#xff1a; html结构 <map sty…

Docker 容器学习笔记

Docker 容器学习笔记 容器的由来 早先&#xff0c;虚拟机通过操作系统实现相互隔离&#xff0c;保证应用程序在运行时相互独立&#xff0c;避免相互干扰。但是操作系统又笨又重&#xff0c;耗费资源严重&#xff1a; 容器技术只隔离应用程序的运行时环境但容器之间共享同一个…

【git】从一个git仓库迁移到另外一个git仓库

在远端服务器创建一个新的仓库 用界面创建&#xff0c;当然也可以用命令创建 拉去源仓库 git clone --bare git192.168.10.10:java/common.gitgit clone --bare <旧仓库地址>拉去成功以后会出现 进入到文件夹内部 出现下面信息&#xff1a; 推送到新的远端仓库 git …

Java从入门到精通-流程控制(一)

流程控制 1.复合语句 复合语句&#xff0c;也称为代码块&#xff0c;是一组Java语句&#xff0c;用大括号 {} 括起来&#xff0c;它们可以被视为单个语句。复合语句通常用于以下情况&#xff1a; - 在控制结构&#xff08;如条件语句和循环&#xff09;中包含多个语句。 - …

ROS机器人编程---------(二)ROS中的核心概念

ROS机器人编程 ROS中的核心概念 ROS的通信机制 在ROS中结点是最小单元&#xff0c;比如说机器人的遥控器可以作为一个控制结点&#xff0c;机器人上的摄像头也可以看作一个结点&#xff0c;ROS通过协调各个结点来实现 在启动任何ROS结点之前&#xff0c;都必须先启动ROS Mas…

Upload-labs 1~15 通关详细教程

文章目录 Upload-labs 1~15 通关详细教程Pass-01-前端js验证Pass-02-后端MIME验证Pass-03-黑名单验证Pass-04-黑名单验证.htaccessPass-05-文件后缀名大小写绕过Pass-06-文件后缀名空格绕过Pass-07-文件后缀名点绕过Pass-08-文件后缀名::$DATA绕过Pass-09-点空格点空格绕过Pass…

【小沐学Unity3d】3ds Max 骨骼动画制作(CAT、Character Studio、Biped、骨骼对象)

文章目录 1、简介2、 CAT2.1 加载 CATRig 预设库2.2 从头开始创建 CATRig 3、character studio3.1 基本描述3.2 Biped3.3 Physique 4、骨骼系统4.1 创建方法4.2 简单示例 结语 1、简介 官网地址&#xff1a; https://help.autodesk.com/view/3DSMAX/2018/CHS https://help.aut…

R语言nlme、nlmer、lme4用(非)线性混合模型non-linear mixed model分析藻类数据实例...

原文链接&#xff1a;http://tecdat.cn/?p23426 混合线性模型&#xff0c;又名多层线性模型(Hierarchical linear model)。它比较适合处理嵌套设计(nested)的实验和调查研究数据&#xff08;点击文末“阅读原文”获取完整代码数据&#xff09;。 相关视频 序言 此外&#xff0…

使用Python进行Base64编码和解码

假设您有一个想要通过网络传输的二进制图像文件。您很惊讶对方没有正确接收该文件 - 该文件只是包含奇怪的字符&#xff01; 嗯&#xff0c;您似乎试图以原始位和字节格式发送文件&#xff0c;而所使用的媒体是为流文本而设计的。 避免此类问题的解决方法是什么&#xff1f;答…

【Vue3】组件递归

【Vue3】组件递归 实现效果 通过传入一个数字&#xff0c;实现数字次循环 父组件 <script setup> import { ref } from "vue"; import RecursionMe from "./components/RecursionMe/index.vue";const level ref(0);const add () > level.val…

接口自动化测试 —— JMeter断言基本使用

断言 断言&#xff1a;就是让程序判断预期结果和实际结果是否一致 注意&#xff1a;请求发起成功了&#xff0c;不代表着一定符合预期的结果。 JMeter中常用断言 响应断言 JSON断言 持续时间断言 响应断言 步骤&#xff1a;&#xff1a;线程组——HTTP取样器——断言——…

解决springboot项目中的groupId、package或路径的混淆问题

对于像我一样喜欢跳跃着学习的聪明人来说&#xff0c;肯定要学springboot&#xff0c;什么sevlet、maven、java基础&#xff0c;都太老土了&#xff0c;用不到就不学。所以古代的聪明人有句话叫“书到用时方恨少”&#xff0c;测试开源项目时&#xff0c;编译总是报错&#xff…

Linux-Centos7安装Docker

文章目录 一、前言二、Docker安装1、Docker及系统版本2、Docker的自动化安装3、Docker手动安装3.1、卸载Docker&#xff08;可选&#xff09;3.2、设置源仓库3.3、Docker安装3.4、Docker启动3.5、验证是否安装成功3.5.1、拉取镜像3.5.2、查看镜像3.5.3、运行镜像 3.6、删除Dock…

http和https的区别?

什么是 HTTP&#xff1f; HTTP是一种互联网数据传输协议&#xff0c;用于在网络服务器和客户端之间进行数据传输。作为万维网的基础&#xff0c;HTTP协议允许网络浏览器向网络服务器发送请求&#xff0c;服务器则会返回响应。HTTP协议基于文本&#xff0c;因此传输的数据是人类…

多源最短路径算法:Floyd-Warshall算法分析

文章目录 图的邻接矩阵 一.Floyd-Warshall算法思想(基于动态规划)二.Floyd-Warshall算法接口笔记附录:单源最短路径--Bellman-Ford算法1.Bellman-Ford算法接口核心部分2.Bellman-Ford算法接口 图的邻接矩阵 namespace Graph_Structure {//Vertex是代表顶点的数据类型,Weight是…