深入理解HTTPS协议原理

news2025/1/12 18:08:33

目录

加密

对称加密

非对称加密

中间人攻击

证书

验证证书合法性

HTTPS工作原理

常见问题


HTTPS即安全超文本传输协议,是互联网上进行安全通信的一种重要协议。它是在HTTP的基础上增加了安全性的要求,通过SSL或TLS协议对数据进行加密,以确保数据传输过程中的安全性、完整性和身份认证。

加密

加密就是把 明文 (要传输的信息)进行一系列变换, 生成 密文 . 
解密就是把 密文 再进行一系列变换, 还原成 明文 . 
在这个加密和解密的过程中, 往往需要一个或者多个中间的数据, 辅助进行这个过程, 这样的数据称为密钥。

加密的方式有很多, 但是整体可以分成两大类: 对称加密 和 非对称加密。

对称加密
对称加密其实就是通过同一个 " 密钥 " , 把明文加密成密文 , 并且也能把密文解密成明文。
引入对称加密之后, 即使数据被截获, 由于黑客不知道密钥是啥, 因此就无法进行解密, 也就不知道 
请求的真实内容是什么了。
但是事情并没有这么简单, 其一:客户端和服务器之间如何确定传输使用的对称密钥是什么?当客户端和服务器之间没有确定传输使用的对称密钥是什么时,必须通过明文传输确定传输使用的对称密钥是什么,但是这个时候对称密钥就可能会被黑客截获,因此这样是不可行的!!!
其二,服务器同一时刻其实是给很多客户端提供服务的,这么多客户端,每个客户端使用的密钥都必须是互不相同的,因为如果是相同的,那么黑客也可以请求服务器获取相同的密钥,黑客可以拿着这个密钥对截获的密文进行解密,这样就导致所谓的加密就没有任何意义了,那么在每个客户端使用的密钥都必须是互不相同的情况下,服务器就需要维护每个客户端和每个密钥之间的关联关系,这也是个很麻烦的事情!!!
因此密钥的传输也必须加密传输! 
但是要想对密钥进行对称加密, 就仍然需要先协商确定一个 "密钥的密钥". 这就成了 "先有鸡还是先有蛋" 的问题了. 此时密钥的传输再用对称加密就行不通了. 
就需要引入非对称加密.
非对称加密
非对称加密要用到两个密钥, 一个叫做 "公钥", 一个叫做 "私钥". 
公钥和私钥是配对的. 最大的缺点就是运算速度非常慢,比对称加密要慢很多。
通过公钥对明文加密, 变成密文
通过私钥对密文解密, 变成明文

也可以反着用:

通过私钥对明文加密, 变成密文
通过公钥对密文解密, 变成明文 

不过,理解“公钥”还是“私钥”,是看它是公开的还是私有的,如果这个密钥是公开的,那么它就是“公钥”;如果它是私有的,这个密钥就是“私钥”。 

前面说到,使用非对称加密安全但是运算速度非常慢,使用对称加密不安全但是运算速度比较快,因此下面考虑将对称加密和非对称加密混合使用。

步骤

1.客户端向服务器发送请求,服务端通过非对称加密生成密钥,然后明文响应给客户端“公钥”;
2.虽然“公钥”可能会被黑客截获,但是没有关系,并没有影响;
3.客户端收到服务端发过来的响应,响应中包含服务器发过来的“公钥”;
4.客户端通过对称加密生成密钥,然后使用服务器的“公钥”对这个通过对称加密生成的密钥进行加密,然后将加密后的密钥发送给服务器;
5.虽然被加密后的密钥可能会被黑客截获,但是黑客并没有服务器的“私钥”,因此不能对密钥进行解密,因此没有影响;
6.服务器收到客户端使用服务器的“公钥”加密后的密钥,服务器使用自己的“私钥”进行解密,就能够得到客户端的密钥了;
7.后续,服务器和客户端就使用客户端的密钥对消息进行加密,因为黑客并不知道这个密钥,因此就没办法对密文进行解密,因此服务器和客户端之间的消息传送是安全的。

但是,这样就真的做到绝对的“万无一失,滴水不漏”了吗?

其实并没有做到,针对上述情况还存在“中间人攻击”。

中间人攻击

步骤

1.服务器通过非对称加密生成公钥X,私钥X';

2.中间人通过非对称加密生成公钥Y,私钥Y';

3.客户端向服务器发起请求,服务器将自己的公钥X明文发送给客户端;

4.中间人截获服务器发送的含有公钥X的明文,然后将其中的公钥X替换成自己的公钥Y,并将公钥X记录保存下来,然后再将报文发送给客户端;

5.客户端收到报文后,此时客户端并不知道报文中的公钥已经被替换过了,客户端使用对称加密生成密钥M,然后使用报文中的公钥Y对自己的密钥进行加密,然后发送给服务器;

6.中间人截获客户端发送的报文,然后使用自己的私钥Y'进行解密,就能够得知客户端的密钥了,然后将这个密钥M使用公钥X进行加密,然后再发送给服务器;

7.服务器收到报文后,并不知道报文已经被中间人做过手脚,服务器使用自己的私钥X'进行解密,得到客户端的密钥M,后续服务器和客户端的消息通过密钥M进行加密和解密;

8.但是后续服务器和客户端发的消息都可以被中间人截获并解密,因为中间人知道密钥M.

图解

我们想一下,为什么会导致上述情况的发生,原因就是因为客户端和服务器并不知道报文是否被动了手脚。

那么如何解决这个问题,使用第三方机构的“证书”。

证书

日常生活中,有些人的行为举止可能会引起警察蜀黍的怀疑,这个时候警察蜀黍可能会查看这个人的“身份证”来辨别这个人是不是好人,此时“身份证”就相当于下面我们要讲解的“证书”,那么二者有何相似之处?

身份证是国家颁发的,是非常权威的,包含的信息有:姓名,住址,身份证号,办理机构,有效日期。

证书也是第三方权威机构颁发的,包含的信息有:颁发机构,有效日期,申请办理机构的公钥,证书所有者,数字签名(对除此之外的其他信息得到的哈希值使用权威机构的私钥加密后得到的值)。

验证证书合法性

每台机器都自带权威机构的公钥,机器收到含证书的报文后,使用内置公钥对数字签名进行解密得到哈希值,然后对除数字签名之外的其他信息计算得到哈希值,通过比较两个哈希值是否相等来判断证书是否被动了手脚。

如果有人对证书动了手脚,比如将证书中的公钥进行替换,那么之后在验证证书时,对除数字签名之外的其他信息计算得到哈希值,和使用内置公钥对数字签名进行解密得到哈希值会不相同;其他情况亦能判断出证书的真假。

HTTPS工作原理

加密方式为  对称加密+非对称加密+引入证书。

常见问题

中间⼈有没有可能篡改该证书?

• 中间⼈篡改了证书的明⽂
• 由于他没有CA机构的私钥,所以⽆法hash之后⽤私钥加密形成签名,那么也就没法办法对篡改后的证书形成匹配的签名
• 如果强⾏篡改,客⼾端收到该证书后会发现明⽂和签名解密后的值不⼀致,则说明证书已被篡改,证书不可信,从⽽终⽌向服务器传输信息,防⽌信息泄露给中间⼈

中间⼈整个掉包证书?

• 因为中间⼈没有CA私钥,所以⽆法制作假的证书(为什么?)
• 所以中间⼈只能向CA申请真证书,然后⽤⾃⼰申请的证书进⾏掉包
• 这个确实能做到证书的整体掉包,但是别忘记,证书明⽂中包含了域名等服务端认证信息,如果整体掉包,客⼾端依旧能够识别出来。
• 永远记住:中间⼈没有CA私钥,所以对任何证书都⽆法进⾏合法修改,包括⾃⼰的 

为什么签名不直接加密,⽽是要先hash形成摘要?

• 缩⼩签名密⽂的⻓度,加快数字签名的验证签名的运算速度 

如何成为中间⼈?

• ARP欺骗:在局域⽹中,hacker经过收到ARP Request⼴播包,能够偷听到其它节点的 (IP, MAC)地址。例, ⿊客收到两个主机A, B的地址,告诉B (受害者) ,⾃⼰是A,使得B在发送给A 的数据包都被⿊客截取。
• ICMP攻击:由于ICMP协议中有重定向的报⽂类型,那么我们就可以伪造⼀个ICMP信息然后发送给局域⽹中的客⼾端,并伪装⾃⼰是⼀个更好的路由通路。从⽽导致⽬标所有的上⽹流量都会发送到我们指定的接⼝上,达到和ARP欺骗同样的效果 。

 

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

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

相关文章

省、市、县夜间灯光数据大全(Excel+shp数据)(1992-2022年)

夜间灯光数据,作为一种遥感数据,能够为我们揭示夜晚地球的灯光和火光分布情况。这种数据不仅能够反映人类活动的空间分布,还能作为经济发展、社会进步和环境变化的一个量化指标。通过分析夜间灯光的亮度和分布,我们可以对一个地区…

Spring三级缓存解决循环依赖?构造方法的循环依赖问题解决(原理、详细过程、面试题)

目录 1.什么是循环依赖 2.Spring三级缓存介绍 3.二级缓存可以解决循环依赖吗? 3.1 二级缓存解决循环依赖过程详解 4. 为什么还需要三级缓存呢?/Spring三级缓存的作用? 4.1三级缓存解决循环依赖过程详解 4.2 为什么二级缓存就不能解决代…

如何在算家云搭建LongWriter(长文创作)

一、 LongWriter 简介 在自然语言处理领域,随着对长文本处理需求的不断增加,能够高效生成长文本的语言模型变得至关重要。LongWriter 的推出正是为了打破传统语言模型在生成超长文本时的限制。LongWriter-glm4-9b 是基于glm-4-9b进行训练的,…

centos7 zabbix监控nginx的pv和uv和status_code

zabbix监控nginx的pv: pv)cat /var/log/nginx/access.log|awk {print $1}|wc -l;;zabbix-get验证: [rootbogon ~]# zabbix_get -s 192.168.253.231 -k pv_uv[pv] 100zabbix监控nginx的uv uv)cat /var/log/nginx/access.log|awk {print $1}|uniq -c | w…

【Oracle实验】字段为空的,无法通过排除判断

Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.场景描述 需求:查询不是某个机构的数据。 同事SQL:where substr(bank_code,1,9) not in(014009001); 看SQL似乎没什么问题,分析…

【SpringCloud】07-分布式事务与Seata

1. 分布式事务 2. Seata 3. 安装seata 配置数据库 CREATE DATABASE IF NOT EXISTS seata /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTIONN */; USE seata;------------------------------- The script used when storeM…

C++ | Leetcode C++题解之第517题超级洗衣机

题目&#xff1a; 题解&#xff1a; class Solution { public:int findMinMoves(vector<int> &machines) {int tot accumulate(machines.begin(), machines.end(), 0);int n machines.size();if (tot % n) {return -1;}int avg tot / n;int ans 0, sum 0;for (…

为什么架构设计禁止IP直连?

什么是IP直连&#xff1f; IP直连指应用程序直接在代码中硬编码IP地址&#xff0c;比如&#xff0c;连接mysql数据库的数据库链接&#xff0c;如下的定义方式&#xff0c;就属于IP直连。 这种写法在开发环境中很常见&#xff0c;但是&#xff0c;在正式生产环境中&#xff0c;…

算法的学习笔记—滑动窗口的最大值(牛客JZ59)

&#x1f600;前言 滑动窗口问题是常见的算法题型&#xff0c;主要考察如何在限定窗口内找到特定值&#xff0c;比如最大值、最小值等。在这篇文章中&#xff0c;我们将深入分析“滑动窗口的最大值”问题的求解方法&#xff0c;并提供一种实现思路&#xff0c;以帮助大家更好地…

惊人,合肥银泰的 LV 柜姐事件引发热议

安徽合肥银泰中心发生的这起“LV柜姐事件”引发了广泛关注。以下是该事件的详细情况&#xff1a;1. 事件起因&#xff1a;- 一名已婚男士到合肥银泰中心的LV专柜购物&#xff0c;因其年轻帅气且出手阔绰&#xff0c;LV柜姐添加了他的联系方式。之后&#xff0c;柜姐在明知男方有…

Python量化交易(五):量化择时策略

引言 大家好&#xff0c;我是GISer Liu&#x1f601;&#xff0c;一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年10月学习赛的Python量化交易学习总结文档。在现代金融市场中&#xff0c;量化择时策略已成为投资者追求超额收益的重要工具。本文将系统梳理量化…

电气安全隐患不容忽视

在现代生活中&#xff0c;电力如同血液般滋养着城市的每一个角落&#xff0c;然而&#xff0c;当这股能量失控时&#xff0c;它也能瞬间化身为吞噬生命的火焰。根据国家消防局的权威数据&#xff0c;电气火灾占所有火灾的28.4%&#xff0c;而其中6.5%的源头直指短路——这一看似…

单细胞数据分析(三):单细胞聚类分析

文章目录 介绍目的加载R包数据链接导入数据可视化聚类选择聚类分辨率值输出结果系统信息介绍 单细胞聚类分析是一种用于解析单细胞RNA测序(scRNA-seq)数据的方法,旨在将成千上万个单细胞根据它们的基因表达模式分组到不同的类别或“簇”中。每个簇代表了具有相似基因表达特…

auto占位符(C++11~C++17)

文章目录 1. 定义1.1 注意事项 2. 推导规则3. 返回类型推导(C14)4. lambda表达式中使用auto类型推导5. 非类型模板形参占位符&#xff08;C17&#xff09; 1. 定义 在C11以前&#xff0c;auto关键字是用来声明自动变量的。从C11起auto被用来&#xff1a;声明变量时根据初始化表…

推荐收藏!一款超好用的网盘资源搜索工具

抖知书老师推荐&#xff1a; 盘搜问世以来&#xff0c;以其简洁、实用的设计&#xff0c;迅速成为网民心中的网盘资源搜索利器。对于那些日常生活离不开网盘的用户来说&#xff0c;盘搜的存在让他们的资源查找变得更加便捷和高效。从影视资源到课程资料再到个人文件&#xff0…

opencv - py_imgproc - py_filtering filtering 过滤-卷积平滑

文章目录 平滑图像目标2D 卷积&#xff08;图像过滤&#xff09;图像模糊&#xff08;图像平滑&#xff09;1. 平均2. 高斯模糊3. 中值模糊4. 双边滤波 其他资源 平滑图像 目标 学习&#xff1a; 使用各种低通滤波器模糊图像将定制滤波器应用于图像&#xff08;2D 卷积&…

MT1401-MT1410 码题集 (c 语言详解)

目录 MT1401归并排序 MT1402堆排序 MT1403后3位排序 MT1404小大大小排序 MT1405小大大小排序II MT1406数字重排 MT1407插入 MT1408插入 MT1409旋转数组 MT1410逆时针旋转数组 MT1401归并排序 c 语言实现代码 #include <stdio.h>// merge two subarrays void merge(int a…

大数据日志处理框架ELK方案

介绍应用场景大数据ELK日志框架安装部署 一&#xff0c;介绍 大数据日志处理框架ELK&#xff08;Elasticsearch、Logstash、Kibana&#xff09;是一套完整的日志集中处理方案&#xff0c;以下是对其的详细介绍&#xff1a; 一、Elasticsearch&#xff08;ES&#xff09; 基本…

PHP海外矿物矿机理财投资源码-金融理财投资源码

PHP海外矿物矿机理财投资源码/金融理财投资源码 海外矿物矿机理财投资源码 测试不错,可以做其他产品理财,功能都没啥太大问题

Unity3D学习FPS游戏(1)获取素材、快速了解三维模型素材(骨骼、网格、动画、Avatar、材质贴图)

前言&#xff1a;最近重拾Unity&#xff0c;准备做个3D的FPS小游戏&#xff0c;这里以官方FPS案例素材作为切入。 导入素材和素材理解 安装Unity新建项目新建文件夹和Scene如何去理解三维模型素材找到模型素材素材预制体结构骨骼和网格材质&#xff08;Material&#xff09;、…