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…

电赛之路:历年试题剖析、实战经验分享与代码资源宝典

电赛之路:历年试题剖析、实战经验分享与代码资源宝典 一、电赛历年试题剖析2018年试题回顾:智能小车2019年试题精选:智能家居系统 二、实战经验分享1. 团队协作的艺术2. 时间管理与迭代开发3. 代码与文档规范 三、代码程序资源推荐1. GitHub电…

PTA 6-4 配对问题

许多大学生报名参与大运会志愿者工作。其中运动场引导员需要男女生组队,每组一名男生加一名女生,男生和女生各自排成一队,依次从男队和女队队头各出一人配成小组,若两队初始人数不同,则较长那一队未配对者调到其他志愿…

Vue3学习-Pinia 集中式状态管理工具

安装 Pinia npm i piniaPinia 集中式状态管理工具官网 传送门 引入 Pinia //引入 import { createPinia } from pinia const pinia createPinia() const app createApp(App); app.use(pinia);使用 // store 注册 import { defineStore } from "pinia"; export …

python弹出文件打开和保存的选择框

tkinter.filedialog 模块中的 askopenfilename 函数和 asksaveasfilename 函数来显示文件打开和保存的选择框。 这两个函数的作用都是返回一个文件名。如果选择了一个文件,则会返回文件的绝对路径,如果取消了选择,则返回空字符串 前者用来读时…

赶紧收藏!2024 年最常见 20道 Redis面试题(八)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(七)-CSDN博客 十五、一个Redis实例最多能存放多少的keys? Redis实例能存放的键(keys)的数量主要受限于以下几个因素: 物理内…

android studio的gradle设置和镜像

新建的应用和其他的应用gradle版本各不一致,想着使用本地已经存在的版本,不知道为啥一直要去下载 现在先找一下镜像源: 官网地址:https://services.gradle.org/distributions/ 腾讯镜像 Gradle下载地址:https://mirro…

【MySQL精通之路】SQL优化(1)-查询优化(5)-引擎条件下推

1 介绍 这种优化提高了无索引列和常量之间直接比较的效率。 在这种情况下,条件会“向下推”到存储引擎进行评估。此优化只能由NDB存储引擎使用。 对于NDB集群,这种优化可以消除在集群的数据节点和发布查询的MySQL服务器之间通过网络发送不匹配行的操作…

【微服务】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 允许用户自定义其界面,并提供了灵活的停靠和…

Keras实现SegNet

我真服了原来我之前用tf复现SegNet给复现错了 在网上试了多个版本代码,折腾了好久,现在终于复现对了,代码也跑通了 SegNet的架构比较老了,这几年都没人更新代码了,我这里算是提供一个最近能跑通的版本的代码吧 tf版本…

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

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

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

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

Axmol 2.1.3 发布

我们非常荣幸,axmol 能在发布此版本之前被 awsome-cpp 收录! The 2.1.3 release is a minor LTS release for bugfixes and improvements, thanks to iAndyHD3 add axmol to awsome-cpp The axmol home page was change to https://axmol.dev Signifi…

引入Dao

1.crm和数据库的结合 我们先前实现的crm项目的数据都是自定义的 而非数据库获取 因此现在我们应该实现crm和数据库的集成 ListServlet.java doPost方法中在处理异常的选项中 并没有发现throws方式 而只有try-catch方式 这是因为子类throws的异常必须和父类throws异常一致或者是…

【电子元件】TL431 电压基准

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

淘宝x5sec

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