Linux网络编程:HTTPS协议

目录

1.预备知识

1.1.加密和解密

1.2.常见加密方式

1.2.1.对称加密

1.2.2.非对称加密

​编辑

1.3.数据摘要(数据指纹)和数据签名

1.4.证书

1.4.1.CA认证

1.4.2.证书和数字签名

2.HTTPS协议

2.1.自行设计HTTPS加密方案

2.1.1.只使用对称加密

2.1.2.只使用非对称加密

2.1.3.双方都使用非对称加密

​编辑

2.1.4.双方使用非对称和对称加密

2.1.5.上述4种方案的漏洞

2.2.合适的HTTPS方案 


1.预备知识

1.1.加密和解密

  • 加密就是把明文(带传输的信息)通过密钥生成密文(只有通过密钥才能解析)
  • 解密就是将明文通过密钥解析成明文
  • 而密钥是加密、解密过程中的中间数据,用来将明文变为密文,密文恢复为明文

1.2.常见加密方式

1.2.1.对称加密

1.2.2.非对称加密

1.3.数据摘要(数据指纹)和数据签名

数据摘要是一种映射机制,并不是一种加密方式,我们知道一段数据可以通过hash函数映射为一个值,当这个值改变时所对应的hash映射值会产生改变。并且即使是一篇文章中,我们只修改了一个单词,最终hash映射值也会产生不同。 

通过这个原理数据指纹的应用如下:

1.4.证书

1.4.1.CA认证

如图:

  1. 当某一个公司搭建自己的网站时,需要将自己的公司信息、网络域名……给CA机构进行备案、审核获得一个CA的证书
  2. 这时CA机构会形成CA机构的公钥和私钥并将公钥写进证书中,发送给服务器,作为服务器的通信证书。
  3. 接着服务器、客户端进行通信时需要基于这个证书进行通信

CA是一个权威机构,规定了所有服务器如果要上线,一定需要CA证书。


为什么需要证书? 这需要结合2.1.这个模块进行学习,所以看到这里大家先跳过,等到结束2.1.模块化再来体会一下证书的作用。

1.4.2.证书和数字签名

我们在2.1.学习结束后发现,单纯通过加密解密的过程中,无法避免中间人篡改、访问数据。这时我就需要结合证书中的信息和数字签名(加密后的数据指纹)来解决“公钥合法性的问题”!!!

目前我们需要解决的问题是:如何确定公钥的合法性(可能被中间人篡改),所以我们接着数字指纹,并加密成数字签名,将其和服务器提供给CA认证的明文信息结合为证书。

我们在数字指纹的学习中,知道完全相同的数据通过相同的哈希算法获得的散列值一定是不变的,在明白了这一点后,我们发现:只要我们判断数字指纹的值和明文信息映射后的散列值是一致的即可保证公钥的合法性

  1. 当客户端获取到证书时,将这个结构化数据分成“数字签名”和“明文信息”
  2. 因为CA的公钥是全球统一的,也就是我们可以通过数字签名读取到里面的散列值内容,但是我们无法修改(需要有CA的私钥才能够修改)
  3. 接着我们对明文信息通过开放的哈希算法进行计算出散列值,最终比较这两个散列值
  4.  如果这两个散列值不同表示明文信息已经被修改,公钥可能有问题!!!

那么回到中间人的角色:

  1. 中间人修改明文信息时一定会导致散列值不同,这时浏览器能够识别到!
  2. 中间人无法修改数字签名中的散列值为自己修改明文信息后的散列值
  3. 中间人可以自己获得证书,替换数字签名和明文信息,这里会出现两个问题:第一中间人的信息就被获取了,另外因为服务器对应网络域名是固定的,也就是中间人的网址一定和目标服务器的网站不同,这时用户可以发现目标收到了篡改!!!

讲到了这里:我们发现了通过证书的引入,中间人无论做出什么行为都无法再次在客户端、服务端未知的状态下,修改公钥,并且读取信息!!!也就是公钥的合法性得到了保证!!!


总结证书能够解决公钥合法性的原因:

  1. 明文信息的散列值加密是通过CA认证的私钥,全球只有CA机构可以修改这个数字签名
  2. 数字指纹实现了只有完全相同的一份数据通过哈希映射的散列值才相同
  3. 证书中的网址是独有的
  4. 所有的浏览器都能够通过内置的CA公钥读取到数字签名中的散列值

那么讲到这里我们就知道如何自定合适的HTTPS方案了!!!

2.HTTPS协议

首先HTTPS协议也是应用层协议,他是在HTTPS协议的基础上添加了一个加密层,防止HTTP协议中明文传输内容收到修改和盗取。

这里需要注意的是:HTTP协议和HTTPS协议需要配对使用!!!

2.1.自行设计HTTPS加密方案

2.1.1.只使用对称加密

2.1.2.只使用非对称加密

2.1.3.双方都使用非对称加密

2.1.4.双方使用非对称和对称加密

2.1.5.上述4种方案的漏洞

我们综合以上4种加密方式,发现2.1.3.和2.1.4.可行,但是会出现安全问题,本质上还是不可行的,但是理论上并没有错误,这是因为我们默认中间人只对密文进行访问,也就是在传输秘钥结束后才开始对传输数据进行读取。而实际上,中间人可能在传输秘钥的过程中就对传输数据进行读取、修改,也就是对秘钥进行了修改……

最终我们发现,因为有中间人的存在,他可以把自己的秘钥传给服务器、客户端,而服务器客户端并不知道这个传来的密钥究竟是对方的还是中间人的,所以以上我们设计的4中方案都不可信!!

那么我们如果设计一个合适的HTTPS方案就需要确定公钥的合法性!!! 

2.2.合适的HTTPS方案 

证书验证+非对称加密+对称加密

 

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

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

相关文章

uniapp使用uni.chooseImage选择图片后对其是否符合所需的图片大小和类型进行校验

uni.chooseImage的返回值在H5平台和其他平台的返回值有所差异,具体差异看下图 根据图片可以看出要想判断上传的文件类型是不能直接使用type进行判断的,所以我使用截取字符串的形式来判断,当前上传图片的后缀名是否符合所需要求。 要求&#…

驱动与系统学习网址

DRM(Direct Rendering Manager)学习简介-CSDN博客 Android Qcom Display学习(零)-CSDN博客 https://blog.csdn.net/hexiaolong2009/category_9705063.htmlhttps://blog.csdn.net/hexiaolong2009/category_9705063.htmlRender Hell —— 史上最通俗易懂…

区间合并-leetcode合并石头的最低成本-XMUOJ元素共鸣:深层次的唤醒

题目 思路 话不多说,直接上代码 附上INT_MAX和INT_MIN 【C】详解 INT_MAX 和 INT_MIN(INT_MAX 和 INT_MIN是什么?它们的用途是什么?如何防止溢出?)_c int max-CSDN博客 代码 /* leetcode合并石头的最低…

clone方法总结Java

Java中Object类当中有许多方法,如图所示: clone方法就是其中一种,分为浅拷贝,深拷贝举一个例子: 浅拷贝: 在Person类当中右键鼠标然后,选中Generate: 然后重写clone方法 protecte…

【微服务】springboot 构建镜像多种模式使用详解

目录 一、前言 二、微服务常用的镜像构建方案 3.1 使用Dockerfile 3.2 使用docker plugin插件 3.3 使用docker compose 编排文件 三、环境准备 3.1 服务器 3.2 安装JDK环境 3.2.1 创建目录 3.2.2 下载安装包 3.2.3 配置环境变量 2.2.4 查看java版本 3.3 安装maven …

pyqt 浮动窗口QDockwidget

pyqt 浮动窗口QDockwidget QDockwidget效果代码 QDockwidget QDockWidget 是 PyQt中的一个控件,它提供了一个可以停靠在主窗口边缘或者浮动在屏幕上的窗口小部件(widget)。QDockWidget 允许用户自定义其界面,并提供了灵活的停靠和…

Elasticsearch集群许可证过期问题解决方法汇总

最近在使用elasticsearch的过程中,使用elastic-head进行可视化展示集群的状态和信息,从2024年5月18日突然elastic-head无法现在集群的状态界面啦,elasticsearch集群状态是正常,命令如下: curl -X GET "localhost:9200/_cluster/health?pretty" 在google页面上通过…

引流500+创业粉,抖音口播工具

在抖音平台运营一个专注于口播的工具号,旨在集结超过500位热衷于创业的粉丝,这需要精心筹划的内容策略和周到的运营计划。首先,明确你的口播工具号所专注的领域,无论是分享创业经验、财务管理技巧还是案例分析,确保你所…

【电子元件】TL431 电压基准

TL431(C23892)是一种常用的可调节精密电压基准和电压调节器。它广泛应用于电源管理、精密参考电压和稳压电路等领域。以下是TL431的一些关键特点和使用方法: 关键特点 可调输出电压:TL431的输出电压可以通过外部电阻网络在2.495V到36V范围内调整。精度高…

淘宝x5sec

声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!wx a15018601872 本文章未…

【数据结构(邓俊辉)学习笔记】二叉树03——重构

0 .概述 介绍下二叉树重构 1. 遍历序列 任何一棵二叉树我们都可以导出先序、中序、后序遍历序列。这三个序列的长度相同,他们都是由树中的所有节点依照相应的遍历策略所确定的次序,依次排列而成。 若已知某棵树的遍历序列是否可以忠实地还原出这棵树…

ic基础|时钟篇05:芯片中buffer到底是干嘛的?一文带你了解buffer的作用

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是…

图片AI高效生成惊艳之作,一键解锁无限创意,轻松打造概念艺术新纪元!

在数字化时代,图片已经成为我们表达创意、传递信息的重要载体。然而,传统的图片生成方式往往耗时耗力,无法满足我们对于高效、创意的需求。幸运的是,现在有了图片AI,它以其高效、智能的特点,为我们带来了全…

微服务-系统架构

微服务: 系统架构的演变 单一应用架构 早期的互联网应用架构,大量应用服务 功能 集中在一个包里,把大量的应用打包为一个jar包,部署在一台服务器,例如tomcat上部署Javaweb项目 缺点:耦合度高,一台服务器…

Point-Nerf 理论笔记和理解

文章目录 什么是point nerf 和Nerf 有什么区别Point Nerf 核心结构有哪些?什么是point-based radiance field? 点云位置以及置信度是怎么来Point pruning 和 Point Growing 什么是point nerf 和Nerf 有什么区别 基本的nerf 是通过过拟合MLP来完成任意视角场景的重…

Linux(六)

Linux(六) 自定义头文件自定义头文件中写什么如何引入头文件条件编译条件编译作用 gcc工作原理Make 工作管理器什么是Make什么是Makefile/makefileMakefile假目标Makefile中的变量自定义变量预定义变量自动变量 Makefile中变量展开方式递归展开方式简单展…

2024攻防演练利器之必修高危漏洞合集

随着网络安全的发展和攻防演练工作的推进,红蓝双方的技术水平皆在实践中得到了很大的提升,但是数字化快速发展也导致了企业的影子资产增多,企业很多老旧系统依旧存在历史漏洞,与此同时,在攻防演练期间,往往…

利用EAS自动生成数据模型和sql脚本

EAS适用于敏捷开发中小系统,这节主要讲解EAS对应的模型和数据库脚本输出应用。 在这个应用程序中,用户可自定义实体模型和枚举模型,只要选择相应的实体或者枚举进行右击添加即可。 解决方案参数设定,在解决方案的设定中可设置项目名称、通用语言,命名空间和输出位置。 连…

C语言系列文章 | 函数 (共 10209 字)

目前主要分为三个专栏,后续还会添加: 专栏如下: C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读! 初来乍到,如有错误请指出,感谢! 目录 函数的概念库函数自…

设计软件有哪些?建模和造型工具篇(1),渲染100邀请码1a12

之前我们介绍的都是渲染软件,但对于设计师来说建模和造型是在渲染之前,所以从现在开始,我们会介绍一批建模和造型工具。 1、ZBrush ZBrush是由Pixologic公司开发的数字雕刻和绘画软件,专为艺术家和设计师而设计。它结合了3D建模…