图解SSL/TLS 建立加密通道的过程

众所周知,HTTPS 是 HTTP 安全版,HTTP 的数据以明文形式传输,而 HTTPS 使用 SSL/TLS 协议对数据进行加密,确保数据在传输过程中的安全。
那么,HTTPS 是如何做到数据加密的呢?这就需要了解 SSL/TLS 协议了。

SSL/TLS 协议

HTTPS 在 HTTP 的基础上,加入了 SSL/TLS 加密层。

SSL/TLS 协议位于应用层和传输层之间,为数据传输提供安全支持。SSL(Secure Sockets Layer)是网景公司开发的安全协议,TLS(Transport Layer Security)是 IETF 制定的新一代安全协议,TLS 是 SSL 的后续版本。

由于历史原因,虽然现在的协议版本已是 TLS,但人们依然习惯称之为 SSL,特别是在讨论 HTTPS 的安全机制时

SSL/TLS 协议负责对传输的数据进行加密,确保数据安全,那么,具体是怎么加密的呢?下面将详细介绍 SSL/TLS 握手协议中的密钥交换和建立加密通道的过程。

加密

首先,我们需要了解加密算法,加密算法分为两大类:对称加密和非对称加密。

对称加密

产生一个密钥,可以用其加密,也可以用其解密
常用算法:AES、DES、3DES、RC4、Blowfish、Twofish…

示例:
在这里插入图片描述

在这里插入图片描述

服务端生成一个 key1,第一次具体的通信之前,客户端发送请求给服务端,服务端把 key1 发给客户端,客户端保存 key1。

之后客户端发送信息给服务端就用 key1 加密。服务端收到信息后,用 key1 解密。

隐患:

在这里插入图片描述

如果第一次通信传输密钥时,key1 就被窃听者获取到了,后续窃听者可以用 key 解密和篡改信息。
在这里插入图片描述

非对称加密

产生一对密钥,公钥和私钥,公钥加密,私钥解密。公钥一般是公开的,私钥一般要保留在服务器端。
常用算法:RSA、ECC(椭圆曲线加密)、DSA、Diffie-Hellman…

示例:
在这里插入图片描述

服务端生成公钥和私钥,正式通信前,服务端把公钥发给 A。后续客户端使用公钥加密信息,服务端用私钥解密。

而在实际应用中,非对称加密算法通常与对称加密算法结合使用:

在这里插入图片描述

客户端拿到公钥 key1 后,生成一个对称加密的密钥 key2,经过公钥 key1 加密传给服务端,服务端有私钥可以解密得到 key2。

之后用 key2 加密解密传输数据。

隐患:

在这里插入图片描述

在最开始客户端和服务端沟通公钥 key1 时,窃听者可以保存公钥 key1,自己再生成一对 key3,把公钥 key3 给客户端。

在这里插入图片描述

客户端使用公钥加密 key2,但它使用的公钥是 key3,窃听者可以解密获取 key2,再把 key2 用 key1 加密给服务端。

在这里插入图片描述

后续通信都是由 key2 加密的,但是窃听者知道了 key2,可以对内容进行解密和篡改。

CA:证书颁发机构 Certificate Authority

要想解决上述隐患,关键是要确保获取的公钥途径是合法的,因此需要引入证书颁发机构(CA)。

先了解一些基本概念:

  • PKI (Public Key Infrastructure) 公钥基础设施

    它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为 PKI。

  • CA:(Certificate Authority) 证书颁发机构

    它是一个权威的第三方机构。

  • PKI 和 CA 的关系

    PKI 负责提供创建、吊销、分发以及更新密钥对与证书的服务,它需要一些证书颁发机构 CA(Certificate Authority) 才能运行。 简单的说,PKI 就是浏览器和 CA。

CA 证书颁发和使用流程

在这里插入图片描述

  1. 服务端向第三方机构 CA 提交公钥、组织信息、个人信息(域名)等信息并申请认证;(不交私钥)

  2. CA 通过线上、线下等多种手段验证申请者提供信息的真实性,如组织是否存在、企业是否合法,是否拥有域名的所有权等;

  3. 如信息审核通过,CA 会向申请者签发认证文件–证书。

  4. 客户端向服务器发出请求时,服务端返回证书文件;

证书里面包含: 服务器的地址(明文存储)、 证书颁发机构、私钥加密的公钥 key1、私钥加密的证书签名 …
由于证书中的服务器公钥 key1、证书签名是通过 CA 的私钥加密的,所以,其他终端只能通过 CA 的公钥解密读取,但无法重新加密伪造。

  1. 客户端读取证书中的相关的明文信息,① 采用相同的散列函数计算得到信息摘要,② 利用对应 CA 的公钥解密签名数据,③ 对比证书的信息摘要,如果一致,则可以确认证书的合法性,即公钥合法;④ 客户端然后验证证书相关的域名信息、有效时间等信息;

  2. 客户端会内置信任 CA 的证书信息(包含公钥),如果 CA 不被信任,则找不到对应 CA 的证书,证书也会被判定非法。

证书签名

上面提到的证书签名的算法是公开的,它的目的是让拿到证书的终端可以验证证书的合法性,防止证书被篡改。

这个签名是基于证书中的内容(例如,持有者的公钥、有效期等),使用 CA 的私钥加密生成。

当其他实体(如客户端或服务器)接收到证书时,可以使用 CA 的公钥来验证签名的有效性。如果签名有效且证书内容没有被篡改,则证明该证书是由可信的 CA 签发的。

证书签名生成和验证的具体流程:
在这里插入图片描述

  1. 哈希计算:CA 使用一个哈希算法(如 SHA-256、SHA-384、SHA-512 等)对证书的内容(如公钥、证书的有效期、颁发者信息等)进行哈希运算。这样可以得到一个固定长度的摘要(即哈希值),该摘要能够唯一地表示证书的内容

  2. 加密签名:CA 使用自己的私钥对该哈希值进行加密,生成数字签名。

  3. 最终生成的证书会包含:证书主体(包括公钥、证书的元数据等)、CA 的签名(数字签名)

  4. 因为算法、证书内容等信息是公开的,所以,其他终端可以使用 CA 的公钥来解密签名,然后将解密出来的哈希值,与使用算法计根据这些公开内容算出来的哈希值进行对比,如果一致,则证明证书没有被篡改,证书是合法的。

使用证书的流程

在这里插入图片描述

  1. 客户端向服务器发出请求时,服务端返回证书文件,内容包含:服务器的地址(明文存储)、证书颁发机构、私钥加密的公钥 key1、私钥加密的证书签名 …;浏览器拿到证书后会根据证书里的颁发机构信息,使用内置的 CA 公钥解密证书签名,验证证书的合法性。

在这里插入图片描述

  1. 客户端生成对称加密的密钥 key2,使用证书中的公钥 key1 加密 key2,发送给服务端,服务端用私钥解密得到 key2。之后使用 key2 加密传输数据。
如果在第一步时,证书被篡改呢?

在这里插入图片描述

如上图,证书被篡改后,因为公钥 key1 和证书签名是使用 CA 的私钥加密的,他们无法被篡改。其他信息被篡改后,证书签名解密出来的哈希值与计算出来的哈希值不一致,证书会被判定非法。

后续通信时,key2 因为是用公钥 key1 加密的,也始终无法被篡改。

总结: SSL/TLS 握手协议中的密钥交换和建立加密通道的过程

  1. 浏览器拿证书
    在建立连接时,浏览器会向服务器发送请求(如 GET 请求),然后服务器会返回其 SSL/TLS 证书。这个证书包含了服务器的公钥、证书颁发机构(CA)的签名,以及其他相关信息。
  2. 浏览器验证证书
    浏览器会检查服务器的证书是否有效,验证证书是否由可信的证书颁发机构(CA)签发,以及证书中的公钥是否匹配预期的服务器。如果证书有效,浏览器继续进行下一步;否则,浏览器会显示警告或中断连接。
  3. 浏览器生成对称加密密钥(key2)
    浏览器会生成一个对称加密密钥(key2),通常称为会话密钥或共享密钥。这是用来加密和解密后续通信的密钥。
  4. 用服务器的公钥加密对称加密密钥(key2)并发送给服务器
    浏览器将生成的对称加密密钥(key2)用 服务器的公钥(key1) 加密,并发送给服务器。此时,只有服务器能够使用其私钥解密获取到密钥(key2)。
  5. 服务器使用 key2 加密和解密数据
    一旦服务器解密得到了对称加密密钥(key2),浏览器和服务器就可以使用该对称密钥(key2)来加密和解密数据。所有后续的通信数据将使用这个对称加密密钥来保护数据的机密性和完整性。

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

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

相关文章

HTTP协议图--HTTP 工作过程

HTTP请求响应模型 HTTP通信机制是在一次完整的 HTTP 通信过程中,客户端与服务器之间将完成下列7个步骤: 建立 TCP 连接 在HTTP工作开始之前,客户端首先要通过网络与服务器建立连接,该连接是通过 TCP 来完成的,该协议…

BurpSuite工具-Proxy代理用法(抓包、改包、放包)

一、Burp Suite 项目管理 二、Proxy(代理抓包模块) 1. 简要说明 1.1. Intercept(拦截) 1.2. HTTP History(HTTP 历史) 1.3. WebSockets History(WebSocket 历史) 1.4. Options…

前端测试框架 jasmine 的使用

最近的项目在使用AngulaJs,对JS代码的测试问题就摆在了面前。通过对比我们选择了 Karma jasmine ,使用 Jasmine做单元测试 ,Karma 自动化完成,当然了如果使用 Karma jasmine 前提是必须安装 Nodejs。 安装好 Nodejs ,使用 npm 安装好必要…

Blender均匀放缩模型

解决办法: 首先选中模型,按下“s”键,如下图所示,此时模型根据鼠标的移动放缩 或者在按下“s”后输入数值,再按回车键Enter,模型会根据你该数值进行均匀放缩 指定放大2倍结果——

TCP/IP 协议图--计算机网络体系结构分层

计算机网络体系结构分层 计算机网络体系结构分层 不难看出,TCP/IP 与 OSI 在分层模块上稍有区别。OSI 参考模型注重“通信协议必要的功能是什么”,而 TCP/IP 则更强调“在计算机上实现协议应该开发哪种程序”

hive 行转列

行转列的常规做法是,group bysum(if())【或count(if())】 建表: CREATE TABLE table2 (year INT,month INT,amount DOUBLE );INSERT INTO table2 (year, month, amount) VALUES(1991, 2, 1.2),(1991, 3, 1.3),(1991, 4, 1.4),(1992, 1, 2.1),(1992, 2, 2.2),(1992…

5G Multicast/Broadcast Services(MBS)相关的Other SI都有哪些?

系统消息分为Minimum SI 和other SI,其中Minimum SI 包括MIB和SIB1,Minimum SI包含初始访问所需的基本信息和获取任何其他 SI 的信息。 而随着3GPP引入的技术越来越多,例如sidelink,NTN,MBS broadcast/multicast以及A…

6. 一分钟读懂“抽象工厂模式”

6.1 模式介绍 书接上文,工厂方法模式只能搞定单一产品族,遇到需要生产多个产品族时就歇菜了。于是,在需求的“花式鞭策”下,程序员们再次绷紧脑细胞,创造出了更强大的抽象工厂模式,让工厂一次性打包多个产品…

Ignis如何将Tokenization解决方案应用于RWA和实体经济

随着区块链技术的发展,代币化(Tokenization)逐渐成为连接数字经济与实体经济的重要桥梁。尤其是RWA(真实世界资产)的概念,近年来成为金融行业的热议话题。Ignis作为Jelurida公司推出的公链平台,…

sql删除冗余数据

工作或面试中经常能遇见一种场景题:删除冗余的数据,以下是举例介绍相应的解决办法。 举例: 表结构: 解法1:子查询 获取相同数据中id更小的数据项,再将id不属于其中的数据删除。-- 注意:mysql中…

mac 安装python3和配置环境变量

mac 安装python3和配置环境变量 前言怎样选择python3的版本python3的安装1、去官网下载安装包2、下载完成后直接解压,检查安装是否成功 前言 在学习python的第一步就是安装它和配置他的环境变量,那么选择哪个版本的python你可曾知道,下面就讲解怎样选择…

Springboot美食分享平台

私信我获取源码和万字论文,制作不易,感谢点赞支持。 Springboot美食分享平台 一、 绪论 1.1 研究意义 当今社会作为一个飞速的发展社会,网络已经完全渗入人们的生活, 网络信息已成为传播的第一大媒介, 可以毫不夸张…

iview upload clearFiles清除回显视图

iview upload 上传完文件之后清除内容&#xff0c;打开会回显视图&#xff0c;清除不掉 关闭弹框时主动清除回显内容即可this.$refs.uploads.clearFiles() <FormItem label"上传附件:" :label-width"formNameWidth"><Upload action"/fms/ap…

并查集的原理及实现

目录 0.引例 1.并查集的原理 2.并查集的存储结构 3.并查集的实现 并查集接口总览 构造函数 查找元素属于哪个集合 判断是否属于同一个集合 合并两个集合 集合的个数 4.并查集完整代码附录 5.并查集在OJ中的应用 省份数量 等式方程的可满足性 0.引例 在我们刚上…

机器学习--绪论

开启这一系列文章的初衷&#xff0c;是希望搭建一座通向机器学习世界的桥梁&#xff0c;为有志于探索这一领域的读者提供系统性指引和实践经验分享。随着人工智能和大数据技术的迅猛发展&#xff0c;机器学习已成为推动技术创新和社会变革的重要驱动力。从智能推荐系统到自然语…

Redis使用场景-缓存-缓存雪崩

前言 之前在针对实习面试的博文中讲到Redis在实际开发中的生产问题&#xff0c;其中缓存穿透、击穿、雪崩在面试中问的最频繁&#xff0c;本文加了图解&#xff0c;希望帮助你更直观的了解缓存雪崩&#x1f600; &#xff08;放出之前写的针对实习面试的关于Redis生产问题的博…

RabbitMQ快速入门

文章目录 一. 引入依赖二. 编写生产者代码1. 创建连接2. 创建channel3. 声明一个队列4. 发送消息5. 释放资源6. 运行代码 三. 编写消费者代码1. 创建连接2. 创建channel3. 声明队列4. 消费消息5. 释放资源6. 运行代码 一. 引入依赖 <!-- https://mvnrepository.com/artifact…

如何设计一套对外开放的API体系

生态建设越来越常见&#xff0c;开放自身API给外部伙伴使用&#xff0c;再正常不过&#xff0c;当然不能仅仅暴露个API出来就算完事了&#xff0c;还需要经过详细的设计及验证。 以下是对设计对外开放 API 的每个要点的进一步展开阐述&#xff1a; 明确目标和需求 深入了解业务…

信号和槽思维脑图+相关练习

将登录框中的取消按钮使用信号和槽的机制&#xff0c;关闭界面。 将登录按钮使用信号和槽连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是否为"123456",如果账号密码匹配成功&#xff0c;当前界面关…

uniapp h5 vue3 m3u8 和 mp4 外链视频播放

m3u8视频播放 使用mui-player 和hls.js。 安装npm install mui-player hls.js我的版本是"hls.js": "^1.5.17"和"mui-player": "^1.8.1"使用 页面标签&#xff1a; 引用&#xff1a; 点击目录播放视频&#xff1a; m3u8视频播放&a…