Linux网络编程:HTTPS协议

news2024/11/17 3:44:06

目录

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.coloradmin.cn/o/1697803.html

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

相关文章

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

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

[GUET-CTF2019]encrypt

我自己大致分析的是输入flag然后先 RC4加密再 base64加密,解了一下发现不对。 那就只能仔细分析了,看有没有魔改 嗯,可以动调试试,嗯就是要找其 key 的值 :0x10,0x20,0x30,0x30,0x20,0x10,0x40 aaaaaaaaaa--->dd…

HTML.

HTML:超文本标记语言(Hyper Text Markup Language) 超文本:不同于普通文本,可以定义图片,音频,视频等内容 标记语言:由标签构成的语言 HTML标签都是预定义好的HTML代码直接在浏览器中运行&#…

Llama 3没能逼出GPT-5!OpenAI怒“卷”To B战场,新企业级 AI 功能重磅推出!

Meta 是本周当之无愧的AI巨星!刚刚推出的 Llama 3 凭借着强大的性能和开源生态的优势在 LLM 排行榜上迅速跃升。 按理说,Llama 3在开源的状态下做到了 GPT-3.7 的水平,必然会显得用户(尤其是企业用户,他们更具备独立部…

ISCC2024个人挑战赛WP-WEB

(非官方解,以下内容均互联网收集的信息和个人思路,仅供学习参考) 还没想好名字的塔防游戏 GET /world.js HTTP/1.1 Host: 101.200.138.180:17345 Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/avif,i…

【神经网络结构可视化】使用 Visualkeras 可视化 Keras / TensorFlow 神经网络结构

文章目录 Visualkeras介绍下载安装代码示例1、导入必要的库2、创建VGG16神经网络模型3、可视化神经网络结构4、完整代码5、使用教程 可视化自己创建的神经网络结构1、导入要的库2、创建自己的神经网络模型3、可视化神经网络结构图4、完整代码 Visualkeras介绍 Visualkeras是一…

大数据信用报告查询有哪些作用?哪个平台更好?

大数据信用是基于大数据技术,通过大数据系统生成的大数据信用报告,报告收集了查询人在非银环境下的申贷数据以及履约行为和信用风险的综合性报告。很多人都会问,大数据信用报告查询有哪些作用?哪个查询平台更好的疑问,下文就详细…

【教学类-58-04】黑白三角拼图04(2-10宫格,每个宫格随机1张-6张,带空格纸)

背景需求: 前期制作了黑白三角拼图2*2、3*3、4*4,确定了基本模板,就可以批量制作更多格子数 【教学类-58-01】黑白三角拼图01(2*2宫格)固定256种随机抽取10张-CSDN博客文章浏览阅读522次,点赞13次&#x…

【JavaEE】深入学习Spring MVC:掌握参数传递与映射

目录 3. 请求传递单个参数传递多个参数传递对象后端参数重命名传递数组传递集合 3. 请求 请求就是要学习如何传参 传递单个参数多个参数对象数组/集合…… 传递单个参数 RequestMapping("/m1") public String m1(String name){return "接收到的参数name:&qu…

python如何把字符串变成小写字母

Python中,将字符串中的字母转换成小写字母,字符串变量提供了2种方法,分别是title()、lower()。 Python title()方法 title()方法用于将字符串中每个单词的首字母转为大写,其他字母全部转为小写,转换完成后&#xff0…

RAG概述(二):Advanced RAG 高级RAG

目录 概述 Advanced RAG Pre-Retrieval预检索 优化索引 增强数据粒度 粗粒度 细粒度 展开说说 优化索引 Chunk策略 Small2Big方法 元数据 引入假设性问题 对齐优化 混合检索 查询优化 查询扩展 查询转换 Post-Retrieval后检索 参考 概述 Native RAG&#…

Kafka SASL_SSL集群认证

背景 公司需要对kafka环境进行安全验证,目前考虑到的方案有Kerberos和SSL和SASL_SSL,最终考虑到安全和功能的丰富度,我们最终选择了SASL_SSL方案。处于知识积累的角度,记录一下kafka SASL_SSL安装部署的步骤。 机器规划 目前测试环境公搭建了三台kafka主机服务,现在将详…

iOS--锁的学习

iOS--锁的学习 锁的介绍线程安全 锁的分类自旋锁和互斥锁OSSpinLockos_unfair_lockpthread_mutexpthread_mutex的属性 NSLockNSRecursiveLockNSConditionNSConditionLockdispatch_semaphoredispatch_queuesynchronizedatomicpthread_rwlock:读写锁dispatch_barrier_…

react【框架原理详解】JSX 的本质、SyntheticEvent 合成事件机制、组件渲染过程、组件更新过程

JSX 的本质 JSX 代码本身并不是 HTML,也不是 Javascript,在渲染页面前,需先通过解析工具(如babel)解析之后才能在浏览器中运行。 babel官网可查看 JSX 解析后的效果 更早之前,Babel 会把 JSX 转译成一个 R…

Linux 内核

查看内核的发行版 $ uname -r 5.4.0-150-genericcd /lib/modules/5.4.0-150-generic, 内核源码所在的位置:/usr/src 这里的内核源码路径(–kernel-source-path)即为: cd /usr/src/linux-headers-5.4.0-150-generic/ 临时生效: …

自建公式,VBA在Excel中轻松获取反义词

自建公式,VBA在Excel中轻松获取反义词 文章目录 前言一、爬取网站数据二、代码1.创建数据发送及返回方法2.汉字转UTF8编码2.获取反义词 三、运行效果截图 前言 小学语文中,近义词、反义词是必考内容之一。家长不能随时辅导怎么办?有VBA&…

dsPIC单片机buck-boost拓扑双向DC-DC电源变换器设计

为实现电池储能装置的双向DC-DC变换器,本系统以buck-boost拓扑电路为核心,通过DSPICFJ256GP710单片机最小系统控制拓扑的切换,从而进行buck恒流充电和boost恒压放电。充电时效率≥94%,放电时效率≥95.5%,具有过压保护及…

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

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

springboot错误

错误总结 1、使用IDEA 的 initialalzer显示2、IDEA 新建文件 没有 java class3、java: 错误: 不支持发行版本 22解决方法4、IDEA-SpringBoot项目yml配置文件不自动提示解决办法 1、使用IDEA 的 initialalzer显示 IDEA创建SpringBoot项目时出现:Initialization fail…

秋招突击——算法——模板题——区间DP(1)——加分二叉树

文章目录 题目描述思路分析实现代码分析总结 题目描述 思路分析 实现代码 不过我的代码写的真的不够简洁&#xff0c;逻辑不够清晰&#xff0c;后续多练练吧。 // 组合数问题 #include <iostream> #include <algorithm>using namespace std;const int N 35; int…