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方案 

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

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux-组管理和权限管理

1 Liunx组的基本介绍: 在Linux中的每个用户必须属于一个组,不能独立于组外。在Linux中每个文件都有所有者、所在组、其他组的概念 所有者所在组其它组改变用户所在的组 2 文件/目录的所有者 一般文件的创建者,谁创建了该文件,就…

Selenium 自动化测试工具<2>(Selenium 常用API的使用方法)

文章目录 浏览器操作浏览器最大化设置浏览器的大小浏览器的前进和后退操作浏览器滚动条 键盘事件单个按键用法键盘组合键用法 鼠标事件不同窗口搜索定位一组元素定位多层框架下拉框定位alert、confirm、prompt 的处理上传文件操作自动截屏 继上一篇文章对 Selenium API 的使用&…

【微机原理及接口技术】可编程并行接口芯片8255A

【微机原理及接口技术】可编程并行接口芯片8255A 文章目录 【微机原理及接口技术】可编程并行接口芯片8255A前言一、8255A的内部结构和引脚1.与外设接口(数据端口)2.与处理器接口 二、8255A的工作方式三、8255A的编程1. 写入方式控制字:控制字…

想转行程序员的朋友,有什么想问的在评论区随便问,我知道的都告诉你。

你想转行程序员吗? 我自己是法学院毕业后,通过2年的努力才转行程序员成功的。 我发现对于一个外行来说,找不到一个适合自己的方向,光靠努力在一个新的行业里成功异常艰难。即使你非常努力,但方向错了也会做大量的无用…

向npm发布自己写的vue组件,使用vite创建项目

向npm发布自己写的vue组件,使用vite创建项目 创建项目 pnpm create vite输入项目名称 由于我的组件是基于 ant-design-vue和vue的,需要解析.vue文件,我又安装了下面4个。 然后执行 pnpm i安装依赖 vite.config.ts import { defineC…

太狠了,凌晨5点面试。。

(关注数据结构和算法,了解更多新知识) 网上看到一网友发文说收到面试邀请,面试时间竟然是早晨5点,这是要猝死的节奏。有的网友说应该是下午 5 点,如果是下午 5 点直接写下午 5 点就行了,或者写 17 点也行,直…

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

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

从关键新闻和最新技术看AI行业发展(2024.5.6-5.19第二十三期) |【WeThinkIn老实人报】

写在前面 【WeThinkIn老实人报】旨在整理&挖掘AI行业的关键新闻和最新技术,同时Rocky会对这些关键信息进行解读,力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议,一起交流学习💪 欢迎大家关注Rocky的公众号&…

近期阅读论文

Exploring Hybrid Active-Passive RIS-Aided MEC Systems: From the Mode-Switching Perspective abstract 移动边缘计算(MEC)被认为是支持延迟敏感和计算密集型服务的有前途的技术。 然而,随机信道衰落特性导致的低卸载率成为制约MEC性能的…

Java 异步编程——Java内置线程调度器(Executor 框架)

文章目录 Java多线程的两级调度模型Executor 框架Executor 框架的组成概念Executor 框架中任务执行的两个阶段:任务提交和任务执行 在 Java1.5 以前,开发者必须手动实现自己的线程池;从 Java1.5 开始,Java 内部提供了线程池。 在J…

VMware虚拟机如何与主机共享文件夹

本机:WIN10 VMware虚拟机:WIN7 因为每次配置都爱忘记操作,目标是为了在WIN7虚拟机中可以访问本机文件 首先本机操作 新建一个共享文件夹,不带中文目录(最好不要) 点击共享 选择everyone,记得权限"读取和写入" 然后到虚拟机里面 添加一个网络位置 点击浏览,选择网…

C++面向对象程序设计-北京大学-郭炜【课程笔记(十一)】

C面向对象程序设计-北京大学-郭炜【课程笔记(十一)】 1、string(重要知识点)1.2、string的赋值和链接1.3、比较string1.4、子串1.5、交换string1.6、寻找string中的字符1.7、删除string中的字符1.8、替换string中的字符1.9、在str…

【C++】---多态

【C】---多态 一、多态的概念二、多态的定义及实现1、构成多态的2个必要条件2、什么叫做虚函数的重写?3、虚函数重写的3个例外4、建议把 析构函数 都定义为:虚函数 三、C11的两个关键字:final override1、final:修饰虚函数&#x…

k8s集群中pod的容器资源限制和三种探针

一、资源限制 总结: requests表示创建pod时预留的资源,limits表示pod能够使用资源的最大值。requests值可以被超,limits值不能超过,如果是内存使用超过limits会触发oom然后杀掉进程,如果是cpu超过limits会压缩cpu的使用…

Hudi 多表摄取工具 HoodieMultiTableStreamer 配置方法与示例

博主历时三年精心创作的《大数据平台架构与原型实现:数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行,点击《重磅推荐:建大数据平台太难了!给我发个工程原型吧!》了解图书详情,…

【Linux初探】:解锁开源世界的神秘钥匙

文章目录 🚀一、了解Linux🔥二、Linux 的发行版❤️三、Linux应用领域💥四、Linux vs Windows & mac 🚀一、了解Linux Linux是一种自由、开放源代码的操作系统,它的内核由芬兰计算机科学家Linus Torvalds在1991年创…

【九十四】【算法分析与设计】练习四蛮力法练习,排列问题和组合问题,求解最大连续子序列和问题,求解幂集问题,求解0/1背包问题,求解任务分配问题

求解最大连续子序列和问题 给定一个有n(n≥1)个整数的序列,要求求出其中最大连续子序列的和。 例如: 序列(-2,11,-4,13,-5,-2)的最大子序列和为20…

机器人支持回调接口配置(详细教程)

大家伙,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 一、前言 今天,给大家介绍一下,如何在机器人中配置回调地址和接口编写。很多时候我们可能有这样的场景,收到消息后,想自己处理一下消息的内…

用Python一键生成PNG图片的PowerPoint幻灯片

在当今的商业环境中,PowerPoint演示是展示和传递信息的常用方式。然而,手动将大量图像插入到幻灯片中往往是一项乏味且耗时的工作。但是,通过Python编程,我们可以轻松自动化这个过程,节省时间和精力。 C:\pythoncode\new\folderTOppt.py 在本文中,我将介绍如何使用Python、wx…

Rust开源Web框架Salvo源码编译

1.克隆源码: https://github.com/salvo-rs/salvo.git 2.进入salve目录并运行cargo build编译 编译成功 3.编译生成的库 4.安装salve-cli git clone --recursive https://github.com/salvo-rs/salvo-cli.git 编译salve-cli