简单聊聊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.mzph.cn/news/61936.shtml

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

相关文章

lnmp架构-mysql2

4.mysql 组复制集群 首先对所有的节点重新初始化 因为对节点的数据一致性要求非常高 主从复制的时候 slave只会复制master的binlog日志 就是二进制日志 不会复制relay_log 在server1上 根据实际情况修改主机名和网段 log_slave_updateON 意思就是 当slave的sql线程做完之后…

【docker】docker的一些常用命令-------从小白到大神之路之学习运维第92天

目录 一、安装docker-ce 1、从阿里云下载docker-cer.epo源 2、下载部分依赖 3、安装docker 二、启用docker 1、启动docker和不启动查看docker version 2、启动服务查看docker version 有什么区别?看到了吗? 3、看看docker启动后的镜像仓库都有什…

趣味微项目:玩转Python编程,轻松学习快乐成长!

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 在学习Python编程的旅程…

【防火墙】防火墙NAT Server的配置

Web举例:公网用户通过NAT Server访问内部服务器 介绍公网用户通过NAT Server访问内部服务器的配置举例。 组网需求 某公司在网络边界处部署了FW作为安全网关。为了使私网Web服务器和FTP服务器能够对外提供服务,需要在FW上配置NAT Server功能。除了公网…

计算机毕设之基于python+echarts+mysql的图书馆可视化管理系统(文档+代码+部署教程)

系统阐述的是一款图书馆可视化管理系统的设计与实现,对于Python、B/S结构、MySql进行了较为深入的学习与应用。主要针对系统的设计,描述,实现和分析与测试方面来表明开发的过程。开发中使用了 django框架和MySql数据库技术搭建系统的整体架构…

WordPress主题Zing V2.2.1/模块化WordPress响应式通用企业商城主题

WordPress主题Zing V2.2.1,模块化WordPress响应式通用企业商城主题。 功能介绍 百度熊掌号文章实时推送、原创保护 多设备支持自适应布局,支持电脑、Pad、手机以及各种浏览器 SEO优化首页、文章、页面、分类均支持自定义标题、关键字和描述 速度优化…

通过参数化可变形曲线直接从 X 射线投影数据计算分割研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

macOS Sonoma 14beta 7(23A5337a)更新发布,附黑/白苹果系统镜像

系统介绍(镜像请前往黑果魏叔官网下载) 黑果魏叔8 月 31 日消息,苹果今日向 Mac 电脑用户推送了 macOS 14 开发者预览版 Beta 7 更新(内部版本号:23A5337a),本次更新距离上次发布隔了 8 天。 …

科技云报道:AI+云计算共生共长,能否解锁下一个高增长空间?

科技云报道原创。 在过去近一年的时间里,AI大模型从最初的框架构建,逐步走到落地阶段。 然而,随着AI大模型深入到千行百业中,市场开始意识到通用大模型虽然功能强大,但似乎并不能完全满足不同企业的个性化需求。 大…

Leetcode ->206 反转链表

题目 算法思路及代码实现 #include <iostream> using namespace std;struct ListNode {int val; //当前节点的值ListNode *next;

Oracle 如何给大表添加带有默认值的字段

一、讲故事 你是否遇到过开发人员添加字段&#xff0c;导致数据库锁表问题&#xff1f; 但是令开发疑惑的事&#xff0c;他们添加字段&#xff0c;有的时候很快&#xff0c;有的时候很慢&#xff1f; 为什么呢&#xff1f; 询问得知&#xff0c;**加的慢时候是带上了default默…

【Tkinter系列09/15】小部件(Scrollbar

22. 小部件Scrollbar 许多小部件&#xff08;如列表框和画布&#xff09;可以 就像将窗口滑动到更大的虚拟区域一样。你 可以将滚动条小部件连接到它们&#xff0c;为用户提供 相对于内容滑动视图的方式。 下面是带有关联条目小部件的屏幕截图 滚动条小部件&#xff1a; 滚动条…

伦敦银交易时间怎么选择?

伦敦银和伦敦金都是全球性的交易品种&#xff0c;一般的现货贵金属交易平台&#xff0c;都可以同时经营这两个品种&#xff0c;而且它们的交易时间是一致的&#xff0c;以香港市场的平台为例&#xff0c;基本上交易时间都会从北京周一的早上7点&#xff0c;延续到周六凌晨5点左…

虚拟化技术原理

计算虚拟化 介绍 把物理主机上物理资源&#xff08;CPU&#xff0c;内存&#xff0c;IO外设&#xff09;&#xff0c;通过虚拟化层抽象成超量、等量的逻辑资源&#xff08;虚拟CPU&#xff0c;虚拟内存&#xff0c;虚拟IO设备&#xff09;&#xff0c;然后重新组合形成新的虚…

跨境海淘攻略:如何实现自己批量养买家账号海淘

近年来&#xff0c;随着互联网的发展&#xff0c;网购已经成为人们日常生活中不可或缺的一部分。不仅在国内购买商品&#xff0c;在跨境电商行业越来越成熟&#xff0c;很多的消费者开始选择购买国外平台商品&#xff0c;价格相比国内专柜来说会更为优惠。因此&#xff0c;海淘…

【C++初阶】反向迭代器的实现

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前学习C和算法 ✈️专栏&#xff1a;C航路 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞&#x1…

【基于空间纹理的残差网络无监督Pansharpening】

Unsupervised Pansharpening method Using Residual Network with Spatial Texture Attention &#xff08;基于空间纹理的残差网络无监督泛锐化方法&#xff09; 近年来&#xff0c;深度学习已经成为最受欢迎的泛锐化工具之一&#xff0c;许多相关方法已经被研究并反映出良好…

使用SpaceDesk连接平板作为电脑副屏详细步骤教程

文章目录 下载安装PC端安装安卓端安装 配置步骤PC端安卓端 连接 SpaceDesk官网链接https://www.spacedesk.net/ (应该是需要科学上网才能进入) SpaceDesk它可以连接安卓,苹果的平板,手机等&#xff0c;也可以连接其他可以打开网页&#xff08;HTML5&#xff09;的设备。 这里我…

Mysql读取binlog并分析 binlog

1&#xff0c;Mysql 开启 binlog 配置文件中增加 [mysqld] log-binmysql-bin 2.常用 binlog命令 # 是否启用binlog日志 show variables like log_bin;# 查看详细的日志配置信息 show global variables like %log%;# 查看binlog的目录 show global variables like "%l…

《Flink学习笔记》——第十二章 Flink CEP

12.1 基本概念 12.1.1 CEP是什么 1.什么是CEP&#xff1f; 答&#xff1a;所谓 CEP&#xff0c;其实就是“复杂事件处理&#xff08;Complex Event Processing&#xff09;”的缩写&#xff1b;而 Flink CEP&#xff0c;就是 Flink 实现的一个用于复杂事件处理的库&#xff08…