Linux-Https协议

文章目录

  • 前言
  • 一、Https协议
  • 二、常见的加密方式
    • 对称加密
    • 非对称加密
    • 数据摘要&&数据指纹
    • 中间人攻击
  • 三、Https的加密历程
    • 方案1-只使用对称加密
    • 方案2-只使用非对称加密
    • 方案3-双方都使用非对称加密
    • 方案4-非对称加密+对称加密
  • 四、CA证书
    • 什么是CA证书
    • CA证书的合法性
      • 如何生成.csr的文件
    • 能否伪造证书?
      • 签名的作用
      • 能否掉包整个CA证书呢?
  • 五、最终方案
    • 如果我的客户端就是黑客呢?


前言

之前我们学习了Http协议,也试着做了一个HttpServer。所以对于Http我们也有了一个比较清晰的认识。


一、Https协议

之前我们在实现一个HttpServer的时候,我们所做的网络传输的数据都是没有任何加密的。

不做任何加密会有什么风险?

  1. 一旦被拦截,里面的数据一览无余。
  2. 可以劫持报文数据,将报文数据做篡改。

Https也是⼀个应用层协议,是在Http协议的基础上引⼊了⼀个加密层。

截止到目前,我们现在浏览的大部分网站都是采用Https协议,http协议正在逐步隐退。

二、常见的加密方式

对称加密

• 采用单钥密码系统的加密方法,同⼀个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的。

• 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2等。

• 特点:算法公开、计算量小、加密速度快、加密效率高。

对称加密其实就是通过同⼀个"密钥",把明文加密成密文,并且也能把密文解密成明文。

⼀个简单的对称加密,按位异或。

非对称加密

需要两个密钥来进行加密和解密,这两个密钥是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
• 常见非对称加密算法(了解):RSA,DSA,ECDSA。
• 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快。
• 通过公钥对明文加密,变成密文
• 通过私钥对密文解密,变成明文
也可以反着用
• 通过私钥对明文加密,变成密文
• 通过公钥对密文解密,变成明文

数据摘要&&数据指纹

• 数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash函数)对信息进行运算,生成一串固定长度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改。

• 摘要常见算法:有MD5、SHA1、SHA256、SHA512等,算法把无限的映射成有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)。

• 摘要特征:和加密算法的区别是,摘要严格来说不是加密,因为没有解密,只不过从摘要很难反推原信息,通常用来进行数据对比。

怎么理解呢? 就像我们上一章将到的Cookie,现在很多企业所保存的Cookie内容其实是session ID, 既然我们要保证用户每一个人都必须保证唯一的session ID,我们就可以采用这种数据摘要的方式来生成用户的唯一session ID。

还有一种应用于云盘当中, 如果我们宿舍4个人都想要在云盘中保存一个教学视频,舍友A率先保存,花费了一个小时才上传到云盘。云盘服务器通过读取该视频二进制数据,生成一个唯一的摘要文件,存入到数据库中。
而当舍友B、C、D也想上传到云盘时,云盘会先读取计算机本地视频的二进制内容,通过同样的算法也生成一个摘要文件,而云盘只需要先上传这个摘要文件,再将它与数据库进行查找,如果找到,那就没有必要再存放一份相同的视频到它的服务器当中。 而是生成一个类似于软链接的文件,这样舍友B、C、D就成功实现秒传。

中间人攻击

Man-in-the-MiddleAttack,简称“MITM攻击”。
日常生活中我们进行网络通信并不是直接向服务器直接发送信息,而是先发送消息给路由器,路由器再发送给运营商,运营商再发给目标服务器。

所以在这里运营商和路由器就是中间人。

所以,如果我们不对数据进行加密的话,中间人可以将我们所传送的报文数据一览无余。

而如果中间人怀有恶意的话,中间人不一定就是运营商,也有可能是一些恶意的VPN,恶意的钓鱼WIFI,恶意的网络热点,恶意的钓鱼网站。就会导致你的隐私泄露或者报文数据被劫持篡改。

三、Https的加密历程

加密方法总是伴随着被破解->改进->被破解->改进…
所以Https在这样的历程中,有过这么几种加密方案。

方案1-只使用对称加密

因为对称加密是客户端和服务器需要约定好各自维护同一份密钥,但是对于客户端,客户端的秘钥是尽量不一样的,因为一旦客户端的秘钥都是相同的,黑客只需要破解一个客户端秘钥,就等于拿到了所有客户端的秘钥。
所以,这就需要服务器同时维护多个秘钥,会产生巨大的负担。且在维护关联关系也是十分麻烦。

方案2-只使用非对称加密

非对称加密需要双方各自持有公钥和私钥,只使用非对称加密的方式,私钥一般都是由服务器来持有,公钥也是服务器在收到请求时,响应给客户端时发送过去的。

图示如下

在这里插入图片描述
这就是客户单和服务器一次交互的流程。但是这并不安全,因为如果存在中间人,就会是这样。
在这里插入图片描述
中间人也能持有公钥S,且不能保证服务器发送给客户端的报文安全。

方案3-双方都使用非对称加密

  1. 服务端拥有公钥S与对应的私钥S’,客户端拥有公钥C与对应的私钥C’。
    客户端和服务端交换公钥。

  2. 客户端给服务端发信息:先用S对数据加密,再发送。只能由服务器解密,因为只有服务器有私钥S’。

  3. 服务端给客户端发信息:先用C对数据加密,再发送。只能由客户端解密,因为只有客户端有私钥C’。

这种方案虽然可行,但是效率很低,而且也存在安全问题。

这里直接贴出有恶意中间人的图示。

在这里插入图片描述

这里的恶意中间人如果自己携带自己的公钥M和私钥M’,方案3就十分不安全。

方案4-非对称加密+对称加密

方案4是针对于方案3 效率低下 的改进,但是也仍然存在和方案3 一样的安全问题。

在这里插入图片描述


上面写的四种方案,它们都具有安全及其他的问题,那么截止到现在,有没有设计出一个安全的方案来阻止黑客的攻击吗?

没有绝对的安全,但是现在已经有一种较为安全的方案了,它引入了一个安全证书的概念!

四、CA证书

以前我们在浏览网站的时候,就有可能看到过浏览器会提示,“当前网站的证书已过期” 的类似警告,现在我们就讲一讲CA证书是什么,他是怎么保证我们https数据传输的安全呢?

其实对于方案四,方案四已经是一个比较完善的方案了,它不安全的地方就在于,无法判断服务端发来的公钥是否是合法的! 所以CA证书就是用来保证其公钥的合法性,让中间人无计可施!

什么是CA证书

为了颁发证书,所以世界的互联网大佬们就需要一个权威机构来颁发,而这个机构就叫作CA机构。

服务端在使⽤HTTPS前,需要向CA机构申领⼀份数字证书,数字证书⾥含有证书申请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书⾥获取公钥就行了,证书就如⾝份证,证明服务端公钥的权威性。

CA证书的合法性

我们申请CA证书,需要准备三样东西。

  1. 你需要生成公钥和私钥(私钥不需要交给CA机构)。
  2. 你的域名,你的申请人(法人),公钥提交给CA机构。
  3. 一份.csr的文件

如何生成.csr的文件

https://myssl.com/csr_create.html

该网站可以生成一份.csr的文件,我们来看看生成.csr的文件需要什么?

在这里插入图片描述

在这里插入图片描述
它会生成一个证书请求文件(包含了你的公钥)和私钥文件。

当你向CA提交了一份CSR文件之后,后续还有更多认证手续,所以是可以保证这个证书颁发下来,就一定是跟这个企业绑定在一起的,如果后续出现了使用合法证书来做违法的事情,可以直接追究到该企业!

能否伪造证书?

不可能! 至于为什么,我们需要了解证书是怎么构成的。

CA证书的形成,其实就是数据签名。
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6c95c9875ed044758139e5fcc8c58fd9.png这里的数据是什么呢?
里面的明文数据,包含了签发机构,有效时间,域名,申请人,公钥等信息,通过哈希算法形成一个散列值,然后CA机构再使用它的私钥对这个散列值进行加密,最后得到的就是签名。

签名与明文信息相组合,就是一个证书的全部内容。

签名的作用

之前我们又讲过数据摘要/数据指纹,这里的散列值就是作为数据指纹,作为的是明文信息的指纹。
一旦明文数据被篡改,之前我们讲数据摘要时讲过,只要文件内容有一点点不同,其通过md5等摘要算法形成的数据摘要都会有巨大偏差,且重复性极低。 这就保证了,只要签名或者明文数据其一被篡改,通过比对数据摘要,就可以发现被篡改。

可是这里的签名是被CA机构加密过的,我们如何解密拿到这个数据指纹呢? 浏览器会内置所有CA机构的公钥,它会根据明文数据中的签发机构来决定使用何种公钥。 有了公钥我们就可以的到明文数据的数据指纹。 浏览器再通过将明文信息使用同种摘要算法就可以得到数据摘要,再与签名解密后的数据摘要进行对比。

在这里插入图片描述

能否掉包整个CA证书呢?

可是可以,但是没人这么干

首先,只有CA机构才能发布CA证书,因为CA证书需要使用CA机构的私钥来完成加密。
其次,经过CA机构的层层认证手续,能认证成功的大部分都是合法机构,证书都包含了相关申请人,企业的信息,如果你真的用CA证书这么干,叔叔第二天就找上门来了。
再者,你的CA证书的明文信息里也是包含了域名的,只需要对比一下浏览器访问的网站和CA证书中的域名是否一致,就可以知道这个CA正式是否被掉包了。

五、最终方案

有了CA证书,我们就可以在方案四的基础上进行改动,我们服务器不再是在握手阶段向客户端直接发送公钥,而是转而发送CA证书,CA证书中就包含了公钥。

在这里插入图片描述

这种方案基本已经可以避免MITM攻击,相对来讲客户端与服务器之前的通信已经是安全的了。


但是客户端与服务器的通信安全不能代表HTTPS整套协议就完全安全了

如果我的客户端就是黑客呢?

如果我的客户端就是黑客,而且黑客还想方设法得到了所有CA机构的公钥,那么黑客就可以看到服务器发来的所有原始保温数据,可以针对该服务器的报文数据的风格样式(也有可能是服务器自己的一套加密算法)进行不断分析。

这种就避免不了,因为CA机构的公钥其实也算是公开的,这就需要服务器自己再来写一套加密算法来保证自己的数据安全。

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

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

相关文章

Python9 Tkinter创建GUI

1.Tkinter简单介绍 Tkinter是Python的标准GUI(图形用户界面)库,提供一种简单的方式来创建窗口程序。Tkinter封装了访问Tk GUI工具包的接口,Tk是一个跨平台的GUI开发库,广泛用于创建图形界面。 使用Tkinter&#xff0…

++++++局部变量、全局变量及变量的存储类别++++====+++指针+++

局部变量、全局变量及变量的存储类别 局部变量与全局变量的基本概念 局部变量:在函数内部定义的变量称为局部变量,也称为内部变量。它们只在定义它们的函数内部有效,即只有在这个函数被调用时,局部变量才会被分配内存空间&#x…

Java学习【深入解读File类:从基础到高级的完整指南】

Java学习【深入解读File类:从基础到高级的完整指南】 ⭐File的概述和构造方法⭐File常见的成员方法🌙构造方法🌙length()🌙getAbsoluteFile()和getPath()🌙getName()和lastModified() ⭐文件的创建和删除⭐获取并遍历 …

从 0 打造私有知识库 RAG Benchmark 完整实践

背景介绍 最近从 0 构建了一个大模型知识库 RAG 服务的自动化 Benchmark 评估服务,可以基于私有知识库对 RAG 服务进行批量自动化测试与评估。本文是对这个过程的详细记录。 本文实际构建的是医疗行业知识库,基于高质量的医学指南和专家共识进行构建。…

8K Stars!Text2SQL还不够?试试更精准的RAG2SQL开源工具

▼618钜惠专场直播,点击预约按钮免费预约。 SQL 是查询数据库的关键,但如何高效地构建满足个人需求的 SQL 语句呢?随着 AI 大模型的进步,我们现在已经拥有了 Text2SQL 的技术,这一技术已被多款产品广泛应用。 今天&…

考研数学|做完《660》,做《880》还是吃力,怎么办?

880吃力说明基础还是不太扎实,建议配合知能行再刷880。 强化之前做660,然后在强化的时候再做880。 660整体难度属于基础阶段到强化阶段。而且是选填部分的题目,所以还是要做一些其他题 然后说一下推荐的习题册:基础不好先做1800、…

如何学习 Java 中的 Socket 编程,进行网络通信

Socket编程是网络编程的核心技术之一,它使得不同主机之间可以进行数据通信。Java提供了丰富的网络编程API,使得编写网络应用程序变得相对简单和直观。本文将详细讲解如何学习Java中的Socket编程,并通过示例代码展示如何实现网络通信。 一、S…

船舶能源新纪元:智能管理引领绿色航运潮流

在蓝色的大海上,无数船只乘风破浪,为全球的贸易和文化交流贡献着力量。然而,随着环保意识的提升和可持续发展的要求,船舶的能源消耗和排放问题逐渐成为了人们关注的焦点。在这个关键时刻,船舶能源管理系统应运而生&…

智能合约开发的过程

智能合约是一种运行在区块链上的程序,可以自动执行预先设定的条款和条件。智能合约具有去中心化、透明、不可篡改等特点,因此被广泛应用于金融、供应链、物联网等领域。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流…

西门子学习笔记12 - BYTE-REAL互相转化

这是针对于前面MQTT协议的接收和发送数组只能是BYTE数组做出的对应的功能块封装。 1、BYTE-REAL转化 1、把byte数组转成字符串形式 2、把字符串转成浮点数 2、REAL-BYTE转化 1、把浮点数转成字符串 2、把字符串转成Byte数组

通过编辑器工具改变Inspector锁定状态

是在看一系列视频的时候,看到的,感觉挺有用,就记录下来。 就是这个小锁的按钮,后续可以通过快捷键,快速锁定和解锁。代码里没有加入快捷键控制,有需要用到的可以自己加一下,比较简单 using Uni…

前端上传minio

参考【GitCode - 全球开发者的开源社区,开源代码托管平台】 注意事项:nodejs服务,文件扩展名为mjs,版本号8.0,引入的时候 import * as Minio from minio import Minio as * from minio// 实例化对象存储服务的MinIO客户端 // p…

c语言字符串函数详解(全)

字符串函数 1.strlen函数 求字符串长度的 //求字符串长度 int my_strlen(char* str) {int count 0;while (*str ! \0){count;*str;}return count; } int main() {char arr[] "abcdef";int red my_strlen(arr);printf("%d\n", red);return 0; } 2. st…

【MySQL】(基础篇十二) —— 子查询

分组数据 本文介绍什么是子查询以及如何使用它们。 SQL允许我们创建子查询(subquery),即嵌套在其他查询中的查询。这样可以实现更复杂的查询,理解这个概念的最好方法是考察几个例子。 利用子查询进行过滤 需求:查询…

一行超长日志引发的 “血案” - Containerd 频繁 OOM 背后的真相

案发现场:混沌初现 2024年6月10日,本应是平静的一天。但从上午 9 点开始,Sealos 公有云的运维监控告警就开始不停地响。北京可用区服务器节点突然出现大量 “not ready” 告警,紧接着,系统自动触发 004 节点重启&…

重学java 75.JDK新特性 ① Lambda表达式

你所做的事情,也许暂时看不到成果,你不是没有成长,而是在扎根 —— 24.6.19 一、函数式编程思想和Lambda表达式定义格式 1.面向对象思想:是Java的核心编程思想 强调的是找对象,帮我们做事儿 比如:去北京 -> 强调的是怎么去,火车,高铁,飞机…

为什么人们对即将推出的 Go 1.23 迭代器感到愤怒

原文:gingerBill - 2024.06.17 TL;DR 它让 Go 变得太“函数式”,而不再是不折不扣的命令式语言。 最近,我在 Twitter 上看到一篇帖子,展示了 Go 1.23(2024 年 8 月)即将推出的 Go 迭代器设计。据我所知&a…

35 Debian如何配置Postfix+Dovecot

作者:网络傅老师 特别提示:未经作者允许,不得转载任何内容。违者必究! Debian如何配置Postfix+Dovecot 《傅老师Debian知识库系列之35》——原创 ==前言== 傅老师Debian知识库特点: 1、拆解Debian实用技能; 2、所有操作在VMware虚拟机实测完成; 3、致力于最终形成Deb…

网安人必备!开源网络安全工具TOP 10(附下载地址)

工欲善其事,必先利其器。对于广大的网络安全从业者,以及未来想要从事网络安全的人来说,选择并善用合适的网络安全工具,能有效提升工作效率。 开源网络安全工具之所以能够在众多安全解决方案中脱颖而出,不仅是因为它们…

1.22 LeetCode总结(基本算法)_位运算

进制的概念 进制即进位计数制,是利用固定的数字符号和统一的规则的带进位的计数方法。 任何一种进位计数制都有一个基数,基数为 X 的进位计数制称为 X 进制,表示每一个数位上的数运算时都是逢 X 进一。 504. 七进制数 手法1:当…