图解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.rhkb.cn/news/483816.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动化立体仓库项目任务调度系统中任务流程可视化实现

在运维自动化平台中,任务系统无疑是最核心的组成部分之一。它承担着所有打包编译、项目上线、日常维护等运维任务的执行。通过任务系统,我们能够灵活地构建满足不同需求的自定义任务流。早期的任务流后端采用了类似列表的存储结构,根据任务流内子任务的排序依次执行,尽管通…

【算法】【优选算法】位运算(下)

目录 一、:⾯试题 01.01.判定字符是否唯⼀1.1 位图1.2 hash思路1.3 暴力枚举 二、268.丢失的数字2.1 位运算,异或2.2 数学求和 三、371.两整数之和四、137.只出现⼀次的数字 II五、⾯试题 17.19.消失的两个数字 一、:⾯试题 01.01.判定字符是…

Java基础之GUI:探索图形化界面编程的魅力

一、引言 Java 的图形用户界面(GUI)编程为开发者提供了丰富的工具和组件,使得创建直观、交互性强的应用程序变得更加容易。本文将深入介绍 Java 基础中的 GUI,包括其概念、组件、布局管理器以及事件处理等方面的知识。 Java 的图…

极兔速递开放平台快递物流查询API对接流程

目录 极兔速递开放平台快递物流查询API对接流程API简介物流查询API 对接流程1. 注册用户2. 申请成为开发者3. 企业认证4. 联调测试5. 发布上线 签名机制详解1. 提交方式2. 签名规则3. 字段类型与解析约定 物流轨迹服务极兔快递单号查询的其他方案总结 极兔速递开放平台快递物流…

【10】MySQL中的加密功能:如何使用MD5加密算法进行数据加密

文章目录 1. MySQL加密功能概述2. MD5加密算法3. 在MySQL中使用MD5加密4. 使用更安全的加密方法总结 在现代的数据库应用中,数据的安全性和隐私性变得尤为重要。无论是存储用户的个人信息,还是保护敏感的业务数据,确保这些数据不会被未授权访…

【Java-数据结构篇】Java 中栈和队列:构建程序逻辑的关键数据结构基石

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 一、引言 1. 栈与队列在编程中的角色定位 栈和队列作为两种基本的数据结构,在众多编程场景中都有着独特的地位。它们为数据的有序…

相交的链表

力扣链接:160. 相交链表 - 力扣(LeetCode) 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据…

SpringBoot两天

SpringBoot讲义 什么是SpringBoot? Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式&#xf…

FilterListenerAjax

今日目标: 能够使用 Filter 完成登陆状态校验功能能够使用 axios 发送 ajax 请求熟悉 json 格式,并能使用 Fastjson 完成 java 对象和 json 串的相互转换使用 axios + json 完成综合案例1,Filter 1.1 Filter概述 Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且…

详解Java数据库编程之JDBC

目录 首先创建一个Java项目 在Maven中央仓库下载mysql connector的jar包 针对MySQL版本5 针对MySQL版本8 下载之后,在IDEA中创建的项目中建立一个lib目录,然后把刚刚下载好的jar包拷贝进去,然后右键刚刚添加的jar包,点击‘添…

数据挖掘之数据预处理

​​​​​​​ 引言 数据挖掘是从大量数据中提取有用信息和知识的过程。在这个过程中,数据预处理是不可或缺的关键步骤。数据预处理旨在清理和转换数据,以提高数据质量,从而为后续的数据挖掘任务奠定坚实的基础。由于现实世界中的数据通常…

scala的正则表达式

定义一个规则,正则表达式 查找。 在目标字符串中,找到符合正则1表达式规则要求的 单个val reg"[^ab]".r 多个字符 1. . 表示 除了换行之外的其他任意单个字符 2. \d 等于【0-9】匹配一个数字 3. \D 除了\d之外的其他任意字符,表…

MySQL——操作

一.库的操作 1.基本操作 创建数据库 create database 数据库名称; 查看数据库 show databases; 删除数据库 drop database 数据库名称; 执行删除之后的结果: 数据库内部看不到对应的数据库 对应的数据库文件夹被删除,级联删除,里面的数据表全部被删…

运费微服务和redis存热点数据

目录 运费模板微服务 接收前端发送的模板实体类 插入数据时使用的entity类对象 BaseEntity类 查询运费模板服务 新增和修改运费模块 整体流程 代码实现 运费计算 整体流程 总的代码 查找运费模板方法 计算重量方法 Redis存入热点数据 1.从nacos导入共享redis配置…

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

前言 相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可…

【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)

CART(Classification and Regression Tree) CART(分类与回归树)是一种用于分类和回归任务的决策树算法,提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集,从而构建一棵树。CART …

《船舶物资与市场》是什么级别的期刊?是正规期刊吗?能评职称吗?

问题解答 问:《船舶物资与市场》是不是核心期刊? 答:不是,是知网收录的正规学术期刊。 问:《船舶物资与市场》级别? 答:国家级。主管单位:中国船舶集团有限公司 主办单…

「Mac畅玩鸿蒙与硬件41」UI互动应用篇18 - 多滑块联动控制器

本篇将带你实现一个多滑块联动的控制器应用。用户可以通过拖动多个滑块,动态控制不同参数(如红绿蓝三色值),并实时显示最终结果。我们将以动态颜色调节为例,展示如何结合状态管理和交互逻辑,打造一个高级的…

利用红黑树封装map,和set,实现主要功能

如果不知道红黑树是什么的时候可以去看看这个红黑树 思路 首先我们可以把封装分为两个层面理解,上层代码就是set,和map,底层就是红黑树 就相当于根据红黑树上面套了两个map,set的壳子,像下面这张图一样 对于map和set,map里面存…