【网络】初识https协议加密过程

news2024/11/26 9:39:17

初识https协议加密过程

  • 为什么不用http而要使用https
  • 常见的加密方式
    • 对称加密
    • 非对称加密
    • 数据摘要&&数据指纹
  • https的工作过程探究
    • 方案一:只使用对称加密
    • 方案二:只使用非对称加密
    • 方案三:双方都使用对称加密
    • 方案四:非对称加密 + 对称加密
    • 中间人攻击
    • 如何确认密钥是否被修改
      • 理解数据签名
      • CA认证
    • 方案五:非对称加密 + 对称加密 + 证书认证
    • 补充
      • 如何生成CSR和密钥
      • 查看浏览器的受信任证书发布机构

为什么不用http而要使用https

  当我们在使用http协议时候,由于http协议在网络中是明文传输的,明文数据会经过路由器、wifi 热点、通信服务运营商、代理服务器等多个物理节点,如果信息在传输过程中被劫持,传输的内容就完全暴露了。劫持者还可以篡改传输的信息且不被双方察觉,这就是中间人攻击,所以我们才需要对信息进行加密。,例如,我在控制台使用命令curl www.baidu.com访问百度
在这里插入图片描述
并使用命令ping www.baidu.com获取百度的ip地址
在这里插入图片描述
然后打开抓包工具,获取http请求
在这里插入图片描述
在这里插入图片描述
就可以看到一个完整的http请求,足以可见,http请求在网络中是明文传输的。而https是在应用层和传输层tcp之间新增了一层软件层(比如SSL或者TLS),这个软件层本身也是属于应用层,这个软件层主要负责对数据进行加密或者解密。本文主要就是介绍https是如何做到加密的
在这里插入图片描述

常见的加密方式

对称加密

  采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单密钥加密,特征:加密和解密所用的密钥是相同的
• 常见对称加密算法(了解):DES、3DES、AES、TDEA、Blowfish、RC2 等
• 特点:算法公开、计算量小、加密速度快、加密效率⾼
  对称加密其实就是通过同一个 “密钥” , 把明文加密成密文, 并且也能把密文解密成明文.

非对称加密

  需要两个密钥来进行加密和解密,这两个密钥分别是是公开密钥(public key,简称公钥)和私有密钥(private key,简称私钥)。
• 常见非对称加密算法(了解):RSA,DSA,ECDSA
• 特点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,而使得加密解密速度没有对称加密解密的速度快
  非对称加密要用到两个密钥, 一个叫做 “公钥”, 一个叫做 “私钥”. 公钥和私钥是配对的.
使用方式有两类:
• 通过公钥对明文加密, 变成密文
• 通过私钥对密文解密, 变成明文
(即如果用公钥加密的话,只有私钥能解密)
也可以反着用
• 通过私钥对明文加密, 变成密文
• 通过公钥对密文解密, 变成明文

数据摘要&&数据指纹

  数字指纹(数据摘要),其基本原理是利用单向散列函数(Hash 函数)对信息进行运算, 生成一串固定⻓度的数字摘要。数字指纹并不是一种加密机制,但可以用来判断数据有没有被篡改
  摘要常见算法:有 MD5、SHA1、SHA256、SHA512 等,算法把无限的映射成
有限,因此可能会有碰撞(两个不同的信息,算出的摘要相同,但是概率非常低)
  摘要特征:和加密算法的区别是,摘要严格意义不是加密,因为没有解密,只不
过从摘要很难反推原信息,通常用来进行数据对比

https的工作过程探究

方案一:只使用对称加密

  即通信双方各自持有同一个密钥,且都使用该密钥进行加密和解密(如果该密钥是不被第三者获得的,那么双方的通信安全自然是有保证的)。
在这里插入图片描述
  但是由于服务器同一时刻其实是给很多客户端提供服务的, 这么多客户端, 每个人用的秘钥都必须是不同的(如果是相同那密钥就会导致非常容易扩散)。因此服务器就需要维护每个客户端和每个密钥之间的关联关系, 这也是个很麻烦的事情
  比较理想的方式就是在客户端和服务器端在建立联系之初就商量好使用的密钥是什么,中间就会不可避免地涉及到对于密钥地交换。但是如果对密钥进行明文传输,则非常容易被"中间人"获取密钥,这样即使客户端和服务端进行通信是使用密文通信的,中间的请求信息也会被破解。
  所以,密钥的交换也需要加密传输。但是,想要对密钥进行加密传输,就需要事先约定一个"密钥的密钥",这就变成一个先有鸡还是现有蛋的问题了,所以,对于密钥进行加密是行不通了,单纯的只使用对称加密也是行不通的

方案二:只使用非对称加密

  由于非对称加密的机制,如果服务器将公钥以明文的方式传输给客户端,之后客户端向服务器传数据之前都先使用这个公钥加密好之后在传输,从客户端到服务端似乎是安全了(因为只有服务器有对应的私钥能解开公钥加密的数据)
  但是服务器到客户端这条路并不能保证安全
  如果服务器使用它的私钥加密数据给客户端,那么客户端可以使用公钥来解密它,而这个公钥是一开始通过明文传输给浏览器的,如果这个公钥被中间人劫持到了,那他也能用该公钥解密服务器传来的信息了

方案三:双方都使用对称加密

步骤:

  1. 服务端有自己的私钥S和公钥S‘,客户端有自己的私钥C和公钥C’
  2. 双方交换公钥
  3. 客户端向服务端发消息时:先将消息经过交换过来的公钥S‘加密,然后通过中间人发到服务端,然后服务端通过自己的私钥S解密,得到明文信息
  4. 服务端向客户端发消息时,同样先将消息经过交换过来的公钥C’加密,然后通过中间人发到客户端,然后客户端通过自己的私钥C解密,得到明文信息

  以上操作步骤看似可行,但是还是存在弊端

  1. 双方通信一直使用对称加密导致效率太低
  2. 安全性依然存在问题(之后解释)

方案四:非对称加密 + 对称加密

步骤:

  1. 服务端有自己的私钥S和公钥S‘
  2. 客户端向服务端发起http请求,获得服务端的公钥S’
  3. 客户端在自己本地生成对称密钥X,并将密钥X通过公钥S‘进行加密之后发送给服务端(此时只有服务器端有私钥S,即只有服务器端可以对加密后的密钥X进行解密)
  4. 服务端收到加密后的密钥X并对其进行解密得到密钥X
  5. 双方以后通信时就只用使用密钥X进行加密和解密的操作即可

  虽然以上方案看似可行,但是都存在一个问题:如果中间人一开始就已经开始攻击了呢?

中间人攻击

就以方案四为例

  1. 服务端有自己的私钥S和公钥S’
  2. 中间人有自己的私钥M和公钥M‘
  3. 客户端向服务端发起请求,请求服务端的公钥S‘
  4. 服务端向客户端发送公钥S’,经过中间人时,中间人也能获取到公钥S‘,并将公钥S’替换成自己的公钥M‘重新发送到客户端
  5. 客户端接收到中间人的公钥M’,同时自己生成一个密钥X,用公钥M‘对密钥X进行加密并发送给服务端
  6. 加密的密钥X再次经过中间人之后,由于密钥X是被中间人自己的公钥M’加密的,所以中间人自己也可以使用私钥M’对密钥进行解密,得到密钥X。然后中间人利用最开始获取到的公钥S‘对该密钥进行加密(确保服务端可以成功解密),然后发送到服务端
  7. 服务端获取到密钥X对其成功解密后,以后服务端和客户端之间的消息都是被密钥X来进行加密和解密的,由于中间人也拥有了密钥X,所以中间人可以劫持数据,进行窃听甚至修改

  以上的方案同样可以适用于方案二和方案三,问题的本质就在于客户端无法判断自己收到密钥是否真的是服务端发过来的而不是被篡改过的

如何确认密钥是否被修改

理解数据签名

在这里插入图片描述
  从上图可以得知,数据经过散列函数之后形成的散列值需要经过签名者的私钥加密之后形成签名,在发送数据之前会将数据和签名放在一起发送出去。在接收者一方,接收到数据和签名之后,先使用签名者将签名解密得到散列值,并对数据重新经过散列函数运算得到散列值,将这两个散列值进行比较,如果两个散列值相同,则说明数据并没有被修改,反之则说明被中间人修改了
  由于解密的一方只会使用签名者的公钥解密,且中间人无法得到签名者的私钥,所以中间人也无法蒙混过去
  而这个签名者在这里指的是CA机构

CA认证

  服务端在使用 HTTPS 前,需要向 CA 机构申领一份数字证书,数字证书里含有证书申
请者信息、公钥信息等。服务器把证书传输给浏览器,浏览器从证书里获取公钥就行了,证书就如身份证,证明服务端公钥的权威性。以下就是CA认证的过程
在这里插入图片描述
  客户端的第一次请求,不仅仅得到了服务端传来的公钥S,实际上,客户端得到的是一个证书,该证书里包含了服务器的域名、公钥等信息,为了证明该证书没有被别人篡改过,它还携带了签名(所有的浏览器(客户端),一般都会内置可信的CA机构或者授权的子机构的公钥)。

方案五:非对称加密 + 对称加密 + 证书认证

  1. 在客户端和服务端建立通信之初,服务端先向客户端发起一个证书,该证书内包含了服务端的公钥以及服务端的相关信息,当然也包含了签名
  2. 客户端收到证书之后,会使用内置的CA机构的公钥对签名进行解密得到散列值,并对证书的其他数据通过哈希函数得到散列值,通过将两个散列值进行比对验证证书内容是否被篡改过
  3. 若验证成功,客户端拿到了服务端发来的公钥,同时自己生成一个密钥X,通过服务端发来的公钥对密钥X进行加密并发送会服务端(由于只有服务端才能解密,所以发送过程中是安全的)
  4. 服务端拿到X,自此之后,双方通过密钥X来进行加密和解密的操作

补充

如何生成CSR和密钥

在线生成CSR和私钥:https://myssl.com/csr_create.html

查看浏览器的受信任证书发布机构

以Edge浏览器为例
点击右上角三个点,点击设置
在这里插入图片描述
在这里插入图片描述
点开就是了
在这里插入图片描述

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

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

相关文章

毕设分享 基于协同过滤的电影推荐系统

文章目录 0 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …

四、Java 概念知识简单了解

一、Java 的类、对象、方法和实例变量 一个 Java 程序可以认为是一系列对象的集合,而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。对象:对象是类的一个实例,有状态(实例变量&#xff…

嵌入式面试——FreeRTOS篇(三) 消息队列和队列集

本篇为:消息队列和队列集篇 消息队列 1、FreeRTOS中的消息队列是什么 答: 消息队列是任务到任务、任务到中断、中断到任务数据交流的一种机制(消息传递)。 2、消息队列和全局变量的区别 答: 消息队列作用有点类似于全局变量,但消…

简单的网络爬虫爬取视频

示例代码爬取一个周杰伦相关视频 import requests# 自己想下载的视频链接 video_url https://vdept3.bdstatic.com/mda-qg8cnf4bw5x6bjs5/cae_h264/1720516251158906693/mda-qg8cnf4bw5x6bjs5.mp4?v_from_shkapp-haokan-hbf&auth_key1728497433-0-0-4a32e13f751e04754e4…

谷歌上架,应用明明没问题,咋就成了“恶意软件”?看看可能的原因

作为Google Play上架应用的开发者,大家的普遍感受:比起写代码,上架的过程简直更让人心力交瘁!特别是涉及用户数据和隐私保护的时候,稍有疏忽,就可能面临应用被下架、甚至账号被封的风险。 最近听到很多开发…

6.存储过程中的游标使用(6/10)

存储过程中的游标使用 引言 在数据库编程中,游标(Cursor)是一种重要的数据库对象,它允许开发者逐行处理查询结果集。这对于需要对每一行数据进行特定处理的场景非常有用,如数据转换、数据清洗、复杂计算等。本文将详…

Qt 与 GTK:跨平台 GUI 开发利器,可用Python助力高效GUI编程

在现代软件开发中,图形用户界面 (GUI) 至关重要,它直接影响用户体验和软件的易用性。Qt 和 GTK 作为两种主流的跨平台 GUI 库,为开发者提供了构建精美且功能强大的应用程序的强大工具。本文将深入介绍 Qt 和 GTK 的特性,并探讨如何…

SwiftUI 6.0(iOS 18)新增的网格渐变色 MeshGradient 解惑

概述 在 SwiftUI 中,我们可以借助渐变色(Gradient)来实现更加灵动多彩的着色效果。从 SwiftUI 6.0 开始,苹果增加了全新的网格渐变色让我们对其有了更自由的定制度。 因为 gif 格式图片自身的显示能力有限,所以上面的…

springboot网站开发-mysql数据库字段varchar类型存储汉字的长度关系

springboot网站开发-mysql数据库字段varchar类型存储汉字的长度关系! 如果你的数据表是utf-8编码,并且采用的是mysql数据库。设计自己的业务数据。那么,如果你采用是varchar类型的字段格式,一个汉字就是一个字节。 如图所示&#…

zookeeper API使用——znode的CRUD

这应该是目录 一、创建连接1.1构造函数1.2创建连接(封装) 二、节点操作2.1创建节点create语法代码 2.2获取节点数据getData语法代码 2.3获取子节点getChildren语法代码 2.4修改节点的值setData语法代码 2.5删除delete语法代码 以下的代码只能作为基础的语法使用,为了…

带隙基准Bandgap电路学习(二)

一、高低温性能测试 设置仿真环境温度为-40℃ ,观察电路管子工作状态是否正确 环路相位裕度为53.1853 输出噪声曲线: 电源抑制PSR曲线: 设置仿真环境温度为85℃ ,观察电路管子工作状态是否正确 环路相位裕度为53.7297 输出噪…

Windows 11 24H2版本有哪些新功能_Windows 11 24H2十四大新功能介绍

距离上次发布的23H2版本已经过去了一年时间,现在,Win 11的24H2版本终于等到了,微软已经全面公开发布Win11 24H2版本,版本号为26100.1742,此次官宣的版本包括了消费者版、商业版、LTSC 2024版等,各种语言版本…

旅游景区小程序|提供多元化服务,打造一站式旅游体验

今年国庆黄金周,各地精心筹备,打造了丰富多彩的文化旅游盛宴,吸引了来自四面八方的游客。凭借各地的自然风光、丰富的人文景观以及精彩纷呈的旅游活动,吸引众多游客。此次国庆旅游市场的火爆,不仅为当地带来了可观的经…

C语言预处理详解(上)(30)

文章目录 前言一、预定义符号二、#define定义标识符三、#define定义宏四、#define的替换规则五、带有副作用的宏六、宏和函数的对比七、#undef的作用八、# 和#的作用##的作用 总结 前言 C语言的入门学习差不多要到尾声了,感觉如何呢~   前文说编译的第一步就是预编…

ax1.twinx()函数介绍

目录 ax1.twinx()实战 ax1.twinx() ax1.twinx() 是 Matplotlib 中用于创建共享 x 轴的双 y 轴的函数。在 Matplotlib 中,当我们希望在同一图中显示不同的数据集,但它们具有相同的 x 轴数据时,可以使用 twinx() 函数创建一个新的坐标轴&#…

(五)、CT球管

第一代和第二代扫描仪使用固定阳极、油冷的X射线管,但由于对输出功率增加的需求,旋转阴极X射线管在CT中变得普遍。 传统固定阳极CT管,当阴极钨丝通过足够的电流时,使其产生白热现象时电子会从钨的表面逸出形成电子云,通…

Lazada菲律宾本土店选品怎么操作?EasyBoss ERP选品功能来帮你!

由于Lazada本土店在流量、履约速度、类目限制以及回款速度方面的优势,越来越多的Lazada卖家都在考虑转型做本土店,但本土化落地并不是一件容易的事,很多卖家在选品阶段就踩大坑了。 因此,为了选品不踩坑,很多卖家都会…

阿里云物联网自有app创建之初始化SDK

文章目录 一、新建工程,配置gradle,导入.so文件,生成apk二、上传apk,集成安全图片,下载SDK三、SDK的集成四、初始化SDK 最近在研究阿里云自有app,这是自己的心得。 一、新建工程,配置gradle,导入.so文件,生…

【论文阅读】超分辨率图像重建算法综述

0. 摘要 研究背景和意义 在人类视觉感知系统中,高分辨率(HR)图像对于清晰表达空间结构、细节特征、边缘纹理等信息至关重要,在医学、刑侦、卫星等多个领域具有广泛实用价值。超分辨率图像重建(SRIR)旨在从低…

MQTT vs HTTP:谁更适合物联网?

前言 随着物联网(IoT)技术的飞速发展中,其应用规模和使用场景正在持续扩大,但它关键的流程仍然是围绕数据传输来进行的,因此设备通信协议选择至关重要。 作为两种主要的通信协议,MQTT 协议和 HTTP 协议各…