Linux网络原理及编程(3)——第十三节 HTTPS

news2024/12/23 10:23:39

我们本文主要来介绍https,主要来介绍https的加密原理。

大家应该都知道http和https的区别,区别很简单,主要就是在https是采用了加密协议的,而http完全是在网络上裸奔的。而我们现在几乎所有的连接都用的是https

我们首先需要明白的是,我们现阶段的加密,本质上,是在应用层和传输层之间进行加密的。加密的算法有很多,比如SSL/TLS等。

为了防止报文在传输的过程中被别人劫走而造成信息泄露,我们想出了一系列加密、认证的方式。

我们循序渐进,一级一级来讲解。

对称加密和非对称加密

对称加密:加密和解密用的是同一个密码或者同一套逻辑的加密方式。常见的对称加密算法有DES,AES,3DES等等。.

非对称加密就不是同一个。所以实际上是否对称即加密和解密的密钥是不是同一个。常见的非对称加密算法:RSA,ECC

我们一般称加密或者解密的为密钥。

在对称加密中,加密和解密用的是同一个密钥;

而在非对称加密中,加密和解密用的不是同一个密钥。有公钥(public key)和私钥(private key)之分。一般一个用于加密,另一个 用于解密。

一代目 

一般情况下,由于非对称加密比较复杂,所以自然效率就没有对称加密高。也就是说,我们在https报文传输的时候,采用的都是对称加密。

这样即存在这样一种情形了:

 如果服务器和客户端都有这样一个密钥,那么对于一个报文(不论其是Request还是Response),我在一端用密钥将此报文加密,在另一端将此密钥解密。

这样的话,我是不是就达到了数据加密的目的了呢?因为这样的话,即便别人拿到了我的报文,也做不了什么事情。因为它是加密的。别人没有我的密钥,就无法解密,得到的只能是加密后的数据。而我的密钥是不会发送到网络上传输的,所以密钥是安全的,一般别人也是得不到的。

这样有没有道理?很有道理。

那这样就行了吗?当然不是。

有没有想过一个问题:这样密钥是从哪里来的?最一开始传输的时候,比如从Cilent发送有一个Request给Server,那服务器怎么知道你的密钥是什么?你的密钥是由哈希算法随机生成的,而且你的密钥在传输的时候是不会放在网络上的(要不然别人拿到了你的密钥,不就相当于没有加密了么)。

那现在就有一个问题了。在第一次传输的时候,对方怎么知道你的密钥是什么?

这就需要结合着非对称加密来进行了。

二代目

于是,就衍生出了非对称加密的方式:公钥和私钥。

通常情况,公钥是用来进行加密的,私钥是用来解密的。

第一次,我们进行非对称加密:

加密和解密使用不同的秘钥,一把作为公开的公钥,另一把作为私钥。公钥加密的信息,只有私钥才能解密。私钥加密的信息,只有公钥才能解密。

这样的话,我们先将我们刚刚的C/S模型加密通信的模型再来模拟一下:

1. 服务端计算出一对秘钥public/private。将私钥保密,将公钥公开。(注意这里的公钥是公开的)

2. 客户端请求服务端时,拿到服务端的公钥public。

3. 客户端通过AES或者其他加密算法计算出一个对称加密的秘钥XY(注意,这里的密钥一般来说是随机生成的字符串)。 然后使用公钥将XY进行加密

---这里即使被黑客劫持也没有用,因为黑客拿不到私钥,无法加密。所以只能拿到被加密后的密钥,拿不到密钥

4. 客户端将加密后的密文发送给服务端。服务端通过私钥解密获得XY

5. 这个时候,客户端有了这个XY,服务端也有了这个XY,然后两边的通讯内容就通过对称密钥X以对称加密算法来加解密。

图示一下:

 

三代目

现在就万事大吉了吗?解决一切问题了?

nonono

思考这样一种情况:

 

当服务器给客户端发送公钥的时候,被我(黑客)劫持。

然后我将我自己的公钥发送给客户端,这个时候,客户端就会拿着我的这个公钥

来对自己的对称密钥x进行加密。在回来的过程中,再被我劫持。

这个时候,由于客户端是用我的公钥来进行加密的,而我自然也有自己的一份对应公钥的私钥来进行解密。这样,客户端的对称密钥x就被我拿到了,那么他所有发送的数据我也就都拿到了。然后又由于我自己也相当于一台服务器,所以我可以继续给服务器发回用服务器公钥加密密钥x的密钥。这样,我便神不知鬼不觉地获得了客户端发送的信息。

注意到,这里同时还存在一个问题:我作为中间者,我有可能将中间的信息篡改。举个例子:client->server 小花我爱你 ,server->client 小明我也很爱你

我很不爽,从中间截获之后,将server->client改为小明我不爱你,滚吧

那这岂不是凉凉了?

那该怎么办呢?这样的问题有解决的方式吗?

实际上,我们主要解决两个问题就可以了。一个是远端服务器的身份认证问题;还有一个中间信息被篡改的问题。

如何解决身份认证问题?

我们引入CA证书这么一个概念

证书里面包含的内容(至少):

  1. 网站域名
  2. 证书持有者
  3. 证书有效期
  4. 证书颁发机构
  5. 服务器公钥(最主要)
  6. 接下来要说的签名时用的hash算法

简而言之,证书的作用就是为了证明这个公钥是你想要连的服务器的,不是我黑客的。

所以,这个证书可以理解为就是公钥+一串东西

那证书如何安全的送达给浏览器,如何防止被篡改呢?给证书盖个章(防伪标记)不就好了,这就又引出另外一个概念:数字签名

签名的过程其实也很简单:

  1. CA机构拥有非对称加密的公钥
  2. CA对证书明文信息进行hash
  3. 对hash后的值用CA私钥加密,得到数字签名

所以呢,另一种方式总结一下:CA机构颁发的证书包含证书内容的明文(公钥等)+签名

我们通过这样一个东西,实际上能把上面两个问题一块给解决了。(具体解决的过程讲解如下:)

大家知道,私钥签名,公钥验签。证书里面的签名是CA机构用私钥签名的,所以我只要用CA机构的公钥验证一下签名不就好了,怎么验证呢?

  1. 拿到证书里面明文的hash算法并对明文内容进行hash运算,得到A
  2. 用CA的公钥解密签名得到B
  3. 比较A 和 B,如果相等,说明没有被篡改,否则浏览器提示证书不可信

那么总结一下,整个过程:

1、服务器给客户端发数据的时候先发一个证书。

2、客户端拿到证书里的明文和哈希算法,然后用该哈希算法对明文进行哈希,得到数据a。

3、用自己浏览器中内置的CA公钥对签名进行解密,得到数据b。

4、如果a == b,则证明证书合法有效,公钥是合法未被篡改过的。

5、客户端将自己的密钥c用服务器的公钥加密,发送给服务器。

6、服务器用自己的私钥对其进行解密,拿到密钥c。

7、双方通过密钥c进行对称加密传输。

注意点出来的是,CA私钥自始至终都没有在网络中传输,它是用来加密CA证书的(即得到CA签名),而CA公钥本身就包含在证书中,其是公开的,所以不用担心泄露的问题。如果CA证书被黑客劫持,是没有用的,因为它拿到了证书,实际上也只是拿到了这样一个签名,对于黑客来说,也是只能验证对方的身份,没有用。而证书本身黑客是伪造不了的(因为证书是由正规的政府机构颁发授予的)。

所以这样子的话,就相对来说,整个传输过程就是比较安全的了。

更多的内容,也可以参考参考这两篇内容,写的也挺不错(拓展视野了):

CA证书扫盲,https讲解。 - handsomeBoys - 博客园 (cnblogs.com)

HTTPS 建立连接的详细过程 - cccc_hi - 博客园 (cnblogs.com)

原创不易,如果觉得写的不错,就点个赞呗~~~笔芯~~~~

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

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

相关文章

Flink学习26:触发器

触发器 作用:决定何时,触发窗口计算函数,开始计算 每个窗口都有一个默认触发器,也可以自定义触发器。 自定义触发器 示例1: 当流中元素达到5个以后,触发窗口计算。 import org.apache.flink.api.common.fu…

基于数据挖掘算法的服装销售平台的设计与实现(spring+spring mvc+mybatis+mysql+maven)

目 录 摘 要 I Abstract II 目 录 III 1 绪论 1 1.1 研究背景 1 1.2 研究意义 2 1.3 国内外研究现状 2 2 相关理论和开发工具 4 2.1 数据挖掘简述 4 2.2 相关数据挖掘算法概述 4 2.2.1关联规则 4 2.2.2 聚类算法 5 2.2.3 分类算法 5 2.3 文本挖掘概述 6 2.4 开发工具 7 3系统需…

5-10人的创业团队,怎么在半个月内上线一款新产品?

5~10 人的小微型创业团队,需不需要专业的研发协作工具? 随着生产力工具的价值获得更广泛的认可,越来越多观点认为,组织结构精简、业务尚未成熟的小微型团队应该尽早引入专业研发协作工具,完成核心竞争力的蜕变。 猴子…

2022 计网复习应用题【太原理工大学】

最后一道大题 —— 应用题&#xff0c;有以下几个考点&#xff0c;原理无需懂会算就行&#xff0c;15 分 拿 10 分不难&#xff0c;建议看一下。>_< 目录 1. 判断 IP 地址类型 2. 通过 IP 地址求子网掩码 3. 求网络地址和广播地址 4. 求主机号和可用 IP 5. 双绞线的…

【Spring】一文带你搞懂Spring IOC容器

前言 本文为 【Spring】Spring IOC容器 相关知识&#xff0c;首先为大家介绍Spring IOC相关的名词概念&#xff0c;对Spring IOC进行概述&#xff0c;然后具体为大家介绍配置元数据&#xff0c;容器实例化与使用等Spring IOC相关详尽内容~ &#x1f4cc;博主主页&#xff1a;小…

【Python毕业设计】Python基于面向对象+tkinter打造学生信息管理系统 | 附源码

前言 halo&#xff0c;包子们上午好 很多学计算机的小伙伴应该都知道&#xff0c;毕业设计是一个头疼的东西 今天的话小编这边给大家准备好了一个Python基于面向对象tkinter打造学生信息管理系统 这不是毕业设计必备项目 说实话操作起来还是有那么一点点的难度的&#xff0c;但…

2023年天津医科大学临床医学院专升本专业课考试报名缴费考试安排

天津医科大学临床医学院2023年高职升本科专业课考试报考须知 一、报名条件&#xff1a; 报考2023年天津医科大学临床医学院高职升本科专业课考试的考生应符合以下条件&#xff1a; 1、符合《2023年天津市高职升本科招生工作规定》中规定的报考资格。 2、我院高职升本科专业课考…

scViewerX ActiveX 多功能文件查看器控件

scViewerX ActiveX 控件 scViewerX是一个功能强大的 ActiveX 控件&#xff0c;允许您查看、打印和转换 PLT、Adobe PDF、Autodesk DWF、CGM、Calcomp、HPGL/2、Gerber、TIF、CALS 和其他几种格式。 ScViewerX 可以将您的文件转换为多种不同的输出文件格式&#xff0c;包括 PDF、…

软件测试题库怎么样 这个刷题小程序很适合临时抱佛脚

考试刷题&#xff0c;面试找工作也要刷题&#xff1f;说到这&#xff0c;可能很多都觉得不可思议&#xff0c;这找工作&#xff0c;还得提前刷题做准备&#xff1f;其实这个现象一个都有的&#xff0c;尤其是对于技术岗来说&#xff0c;由于面试官会着重询问技术相关问题&#…

结合邻域连接法的蚁群优化(NACO)求解TSP问题附Matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

(附源码)node.js学生钟点工管理系统 毕业设计 290011

学生钟点工管理系统 摘 要 随着科学技术的飞速发展&#xff0c;社会的方方面面、各行各业都在努力与现代的先进技术接轨&#xff0c;通过科技手段来提高自身的优势&#xff0c;学生钟点工管理系统当然也不能排除在外。学生钟点工管理系统是以实际运用为开发背景&#xff0c;运用…

docker(2):docker常用命令

目录帮助命令镜像命令docker imagesdocker searchdocker pulldocker rmi容器命令docker rundocker psdocker rm启动/停止/退出其他常用命令后台启动docker logsdocker topdocker inspectdocker execDocker attachdocker cp命令大全总结所有命令请查看帮助文档&#xff1a;https…

[附源码]Python计算机毕业设计SSM基于售楼系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Span 抽取和元学习能碰撞出怎样的新火花,小样本实体识别来告诉你!

作者&#xff1a;王嘉宁、汪诚愚、谭传奇、邱明辉、黄松芳、黄俊、高明 近日&#xff0c;阿里云机器学习平台PAI与华东师范大学高明教授团队、达摩院机器智能技术NLP团队合作在自然语言处理顶级会议EMNLP2022上发表基于Span和元学习的小样本实体识别算法SpanProto。这是一种面…

界面控件DevExtreme DataGrid——一个多用途的UI组件

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合&#xff0c;使您可以利用现代Web开发堆栈&#xff08;包括React&#xff0c;Angular&#xff0c;ASP.NET Core&#xff0c;jQuery&#xff0c;Knockout等&#xff09;构建交互式的Web应用程序&#xff0c;该套件附带功能齐…

【视频】什么是非线性模型与R语言多项式回归、局部平滑样条、 广义相加GAM分析工资数据|数据分享...

全文链接&#xff1a;http://tecdat.cn/?p9706在这文中&#xff0c;我将介绍非线性回归的基础知识。非线性回归是一种对因变量和一组自变量之间的非线性关系进行建模的方法。最后我们用R语言非线性模型预测个人工资数据&#xff08;查看文末了解数据获取方式&#xff09;是否每…

《人月神话》(The Mythical Man-Month)看清问题的本质:如果我们想解决问题,就必须试图先去理解它...

第一章 焦油坑&#xff08;The Tar Pit&#xff09;史前史中&#xff0c;没有比巨兽在焦油坑中垂死挣扎的场面更令人震撼的了。上帝见证着恐龙、猛犸象、剑齿虎在焦油中挣扎。它们挣扎得越是猛烈&#xff0c;焦油纠缠得越紧&#xff0c;没有任何猛兽足够强壮或具有足够的技巧&a…

Linux简化版线程池

目录 一&#xff0c;线程池设计 二&#xff0c;线程池应用场景 三&#xff0c;线程池准备 1&#xff0c;包装一个锁 2&#xff0c;一个任务类 三&#xff0c;线程池 1&#xff0c;成员介绍 2&#xff0c;设计单例模式 3&#xff0c;创建线程池 4&#xff0c;线程池执…

【吴恩达机器学习笔记】十六、应用实例:图片文字识别

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4e3;专栏定位&#xff1a;为学习吴恩达机器学习视频的同学提供的随堂笔记。 &#x1f4da;专栏简介&#xff1a;在这个专栏&#xff0c;我将整理吴恩达机器学习视频的所有内容的笔记&…

【Linux】Zabbix5.0平台的搭建

文章目录项目背景视频展演一、Linux基础配置1、查看当前系统版本2、修改主机名3、修改 IP 地址4、配置防火墙5、关闭 SELINUX6、修改系统时间及时区7、配置 YUM 库方式 1方式 2二、安装apache1、安装 apache2、启动 apache 服务3、设置 httpd 服务开机启动4、查看服务状态5、防…