HTTPS协议的原理 --- RSA密钥协商算法

news2024/10/6 1:35:19

目录

一、TLS握手过程

二、RSA密钥协商握手过程

TLS第一次握手

TLS第二次握手

TLS第三次握手

TLS第四次握手

数字证书和CA机构

数字证书签发和验证流程

三、RSA 算法的缺陷

DH 密钥协商算法


一、TLS握手过程

上图简要概述来 TLS 的握手过程,其中每一个「框」都是一个记录(record),记录是 TLS 收发数据的基本单位,类似于 TCP 里的 segment。多个记录可以组合成一个 TCP 包发送,所以通常经过「四个消息」就可以完成 TLS 握手,也就是需要 2个 RTT 的时延,然后就可以在安全的通信环境里发送 HTTP 报文,实现 HTTPS 协议。

所以可以发现,HTTPS 是应用层协议,需要先完成 TCP 连接建立,然后走 TLS 握手过程后,才能建立通信安全的连接。

二、RSA密钥协商握手过程

TLS第一次握手

客户端首先会发送一个「Client Hello」的消息,字面意思我们也都能理解,意思是和服务器「打招呼」。

 消息里面有客户端使用的TLS版本号、支持的密码套件列表,支持的压缩方式,以及生成的随机数(*Server Random*),这个随机数会被服务器保留,它是生成对称加密密钥的材料之一。

TLS第二次握手

当服务器收到客户端的「Client Hello」消息后,会确认 TLS 版本号是否支持,和从密码套件列表中选择一个密码套件,还有选择压缩算法(安全性原因,一般不压缩),以及生成随机数(*Server Random*)

接着,返回「Server Hello」消息,消息里面有服务器确认的 TLS 版本号,也给出了随机数(Server Random),然后从客户端的密码套件列表选择了一个合适的密码套件。

可以看到,服务端选择的密码套件是 “Cipher Suite: TLS_RSA_WITH_AES_128_GCM_SHA256”。

密码套件的基本形式是:「密钥交换算法 + 签名算法 + 对称加密算法 + 摘要算法

一般 WITH 单词前面有两个单词,第一个单词是约定密钥交换的算法,第二个单词是约定证书的验证算法

比如上面的密码套件的意思就是:

  • 由于 WITH 单词只有一个 RSA,则说明握手时密钥交换算法和签名算法都是使用 RSA;

  • 握手后的通信使用 AES 对称算法,密钥长度 128 位,分组模式是 GCM;

  • 摘要算法 SHA256 用于消息认证和产生随机数

就前面这两个客户端和服务端相互「打招呼」的过程,客户端和服务端就已确认了 TLS 版本和使用的密码套件,而且你可能发现客户端和服务端都会各自生成一个随机数,并且还会把随机数传递给对方。

那这个随机数有啥用呢?其实这两个随机数是后续作为生成「会话密钥」的条件,所谓的会话密钥就是数据传输时,所使用的对称加密密钥。

然后,服务端为了证明自己的身份,会发送「Server Certificate」给客户端,这个消息里含有数字证书。

随后,服务端发了「Server Hello Done」消息,目的是告诉客户端,我已经把该给你的东西都给你了,本次打招呼完毕。

TLS第三次握手

客户端验证完证书后,认为可信则继续往下走。接着,客户端就会生成一个新的随机数 (pre-master),用服务器的 RSA 公钥加密该随机数,通过「Change Cipher Key Exchange」消息传给服务端。

服务端收到后,用 RSA 私钥解密,得到客户端发来的随机数 (pre-master)

至此,客户端和服务端双方都共享了三个随机数,分别是 Client Random、Server Random、pre-master

于是,双方根据已经得到的三个随机数,生成会话密钥(Master Secret),它是对称密钥,用于对后续的 HTTP 请求/响应的数据加解密。

生成完会话密钥后,然后客户端发一个「Change Cipher Spec」,告诉服务端开始使用加密方式发送消息。

然后,客户端再发一个「Encrypted Handshake Message(Finishd)」消息,把之前所有发送的数据做个摘要,再用会话密钥(master secret)加密一下,让服务器做个验证,验证加密通信是否可用和之前握手信息是否有被中途篡改过。

可以发现,「Change Cipher Spec」之前传输的 TLS 握手数据都是明文,之后都是对称密钥加密的密文。

TLS第四次握手

服务器也是同样的操作,发「Change Cipher Spec」和「Encrypted Handshake Message」消息,如果双方都验证加密和解密没问题,那么握手正式完成。

最后,就用「会话密钥」加解密 HTTP 请求和响应了。

数字证书和CA机构

在说校验数字证书是否可信的过程前,我们先来看看数字证书是什么,一个数字证书通常包含了:

  • 公钥;

  • 持有者信息;

  • 证书认证机构(CA)的信息;

  • CA 对这份文件的数字签名及使用的算法;

  • 证书有效期;

  • 还有一些其他额外信息;

那数字证书的作用,是用来认证公钥持有者的身份,以防止第三方进行冒充。说简单些,证书就是用来告诉客户端,该服务端是否是合法的,因为只有证书合法,才代表服务端身份是可信的。

我们用证书来认证公钥持有者的身份(服务端的身份),那证书又是怎么来的?又该怎么认证证书呢?

为了让服务端的公钥被大家信任,服务端的证书都是由 CA (Certificate Authority,证书认证机构)签名的,CA 就是网络世界里的公安局、公证中心,具有极高的可信度,所以由它来给各个公钥签名,信任的一方签发的证书,那必然证书也是被信任的。

之所以要签名,是因为签名的作用可以避免中间人在获取证书时对证书内容的篡改。

数字证书签发和验证流程

CA 签发证书的过程,如上图左边部分:

  • 首先 CA 会把持有者的公钥、用途、颁发者、有效时间等信息打成一个包,然后对这些信息进行 Hash 计算,得到一个 Hash 值;

  • 然后 CA 会使用自己的私钥将该 Hash 值加密,生成 Certificate Signature,也就是 CA 对证书做了签名;

  • 最后将 Certificate Signature 添加在文件证书上,形成数字证书;

客户端校验服务端的数字证书的过程,如上图右边部分:

  • 首先客户端会使用同样的 Hash 算法获取该证书的 Hash 值 H1;

  • 通常浏览器和操作系统中集成了 CA 的公钥信息,浏览器收到证书后可以使用 CA 的公钥解密 Certificate Signature 内容,得到一个 Hash 值 H2 ;

  • 最后比较 H1 和 H2,如果值相同,则为可信赖的证书,否则则认为证书不可信。

TLS的整个通信的过程图

 

三、RSA 算法的缺陷

使用 RSA 密钥协商算法的最大问题是不支持前向保密。因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密的,服务端收到后,会用私钥解密得到随机数。所以一旦服务端的私钥泄漏了,过去被第三方截获的所有 TLS 通讯密文都会被破解。

为了解决这一问题,于是就有了 DH 密钥协商算法,这里简单介绍它的工作流程。

DH 密钥协商算法

客户端和服务端各自会生成随机数,并以此作为私钥,然后根据公开的 DH 计算公示算出各自的公钥,通过 TLS 握手双方交换各自的公钥,这样双方都有自己的私钥和对方的公钥,然后双方根据各自持有的材料算出一个随机数,这个随机数的值双方都是一样的,这就可以作为后续对称加密时使用的密钥。

DH 密钥交换过程中,即使第三方截获了 TLS 握手阶段传递的公钥,在不知道的私钥的情况下,也是无法计算出密钥的,而且每一次对称加密密钥都是实时生成的,实现前向保密

但因为 DH 算法的计算效率问题,后面出现了 ECDHE 密钥协商算法,我们现在大多数网站使用的正是 ECDHE 密钥协商算法

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

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

相关文章

Morris遍历

1、引入 二叉树的遍历 递归实现的方式: public static class Node {public int value;Node left;Node right;public Node(int data) {this.value data;} }//每个节点都是被有限次访问,时间复杂度O(N),因为每次递归都要存储返回信息&#…

hadoop 集群搭建(详细版)

hadoop 集群搭建更改主机名映射设置免密同步时间创建工作目录下载jdk安装配置Hadoop修改配置文件向其他节点分发配置完成的程序为Hadoop添加环境变量启动集群初始化启动集群web页面web页面:[hdfsweb页面](http://192.168.88.128:9870/)web页面:[yarnweb页面](http://192.168.88…

3.0、Linux-常用目录、文件基本命令

3.0、Linux-常用目录、文件基本命令 命令:ls(列出目录) ls 命令在 Linux 中是常常被使用到的,因为 Linux 不像 Windows有可视化的界面; -a 参数:all ,查看全部的文件,包括隐藏文件&…

【免杀前置课——Windows编程】二十三、内存管理—堆内存管理、虚拟内存管理、文件映射、共享内存、不依靠临界区限制文件多开、DLL注入

内存管理—堆文件映射***文件映射的概念:***共享内存文件多开限制新思路DLL注入远程线程注入远程线程注入.exetest.dll文件映射 文件映射的概念: 文件映射(Mapping)是一种将文件内容映射到进程虚拟内存的技术。 映射成功的文件可以用视图,来引用这段内存,从而达到…

中科易安联网智能门锁2022年度总结

时光如梭,步履不辍。在这繁忙而又充实的一年,中科易安从提升服务、优化产品、扩展市场的维度发力,通过扎实的努力、不懈的勤勉,圆满地完成了2022年的工作。接下来,中科易安将为媒体、友商、用户朋友们呈现中科易安2022…

通过Lambda表达式 简单体验一下java方法引用

观看本文前 您需要先掌握 Lambda表达式 如果您之前没有接触过 可以先查看我的文章 java Lambda概念 通过实现线程简单体验一下Lambda表达式 java Lambda表达式的标准格式及其前提带有(代码演示) 然后 我们用 Lambda表达式 写在里面的其实就是一种解决方案 拿参数做操作 那么 …

Qss文件设置Qt界面风格

需要协商才能修改软件界面的风格,所以要留出通用的接口,于是选择使用QSS文件设置软件风格。 一、创建Qss文件 直接创建以.qss为后缀的文件 二、Qt使用Qss文件有两种办法 1、第一种办法,添加资源文件.qrc,然后在qrc文件中添加qss文…

【云边有个小卖部】

童年就像童话,这是他们在童话里第一次相遇。 那么热的夏天,少年的后背被女孩的悲伤烫出一个洞,一直贯穿到心脏。 刘十三被欺负得最惨,却想保护凶巴巴的程霜。 每当她笑的时候,就让他想起夏天灌木丛里的萤火虫&#xff…

Tic-Tac-Toe有多少种不同棋局和盘面状态(python实现)

目录 1. 前言 2. 如何去重? 3. 代码实现 3.1 对称等价判断 3.2 find_neighbor()改造 3.3 主程序及运行结果 4. 延申思考 1. 前言 在前两篇博客中实现了遍历搜索所有的Tic-Tac-Toe的棋局的python程序实现。 Tic-Tac-Toe可能棋局搜索的实现(python…

【Java寒假打卡】Java基础-多态

【Java寒假打卡】Java基础-多态概述多态中成员访问的特点多态的好处和弊端多态中转型多态中转型存在的风险概述 同一个对象在不同时刻表现出来的不同形态 多态的前提和体现 有继承/实现关系有方法重写。子类对父类进行方法重写有父类引用指向子类对象 package com.hfut.edu.…

【阶段二】Python数据分析NumPy工具使用02篇:数组的基本属性与数组的数据获取

本篇的思维导图: 数组的基本属性 NumPy数组的基本属性主要包括数组的形状、大小、类型和维数。 描述 代码 结果

Zookeeper详解(一)——基础介绍

概念 zookeeper官网:https://zookeeper.apache.org/ 大数据生态系统里的很多组件的命名都是某种动物或者昆虫,比如hadoop就是 🐘,hive就是🐝。zookeeper即动物园管理者,顾名思义就是管理大数据生态系统各…

Linux 系统调用的本质

简单概念 fd #include <unistd.h> #include <string.h>int main(int argc,char* argv[]) {char buf[20]{0};read(0,buf,15);write(1,buf,strlen(buf));return 0; }如果想查看某个系统编程的接口&#xff0c;比如想查看 open 函数的用法&#xff0c;可以这样操作…

Python调用C++代码用法——Linux

目录 前言 C/C动态共享库编译 ctype模块 ctype数据类型 使用案例 float数据 指针 结构体及结构体指针 numpy图像当作指针传入 参考资料&#xff1a; 前言 在项目开发中&#xff0c;有时会使用到多种编程语言&#xff0c;比如部分功能是C/C代码实现的&#xff0c;而另一…

《机器学习与应用》实验二:BP神经网络实验

文章目录 一、实验目的二、实验原理BP算法的数学描述三、程序四、实验结论一、实验目的 1、 熟悉MATLAB中神经网络工具箱的使用方法; 2、 通过在MATLAB下面编程实现BP网络逼近标准正弦函数,来加深对BP网络的了解和认识,理解信号的正向传播和误差的反向传递过程。 二、实验…

SAP MM物料与客户主数据的税分类

一&#xff0e;说明 在物料主数据、客户主数据中均有税分类的维护&#xff0c;税分类既不是税码也不代表税率&#xff0c;它们的作用是通过税务条件记录确定税码。所有的税分类在主数据中都是与国家相关的无组织机构数据&#xff0c;例如物料的销售组织有中国&#xff08;ZH&am…

智慧WMS立体仓库管理系统源码 基于springboot框架(已经测试完整带部署搭建教程)源码分享!

淘源码&#xff1a;国内知名的高品质源码免费下载平台 分享一套智慧WMS立体仓库管理系统源码&#xff0c;基于springboot框架 已经测试完整带部署搭建教程。&#xff08;MF00767&#xff09; 需要源码学习可私信我获取。 技术架构 技术框架&#xff1a;SpringBoot layui H…

ESLint插件的使用

官网地址 规范写代码的工具. 多人开发不同规则,提交代码一堆冲突 培养代码风格使用 vscode更改tab缩进空格数----设置—搜索tabsize—找到tab size—修改2(每次按下tab都缩进俩空格)—Vetur > Format Options: Tab Size这个也要修改为2 vscode搜索format----勾选Editor: Fo…

javaweb01--mysql的介绍和增删改查操作

文章目录Mysql的介绍和增删改查说明1. mysql的登陆和退出11 登陆1.2 退出2. SQL语法的简单介绍2.1 语法2.2 SQL分类3. SQL主要操作语句3.1 DDL:操作数据库3.1.1 查询3.1.2 创建数据库3.1.3 删除数据库3.1.4 使用数据库3.2 DDL:操作表3.2.1 查询表3.2.2 创建表3.2.3 数据类型3.2…

《梁启超家书》笔记二——一个人若是在舒服的环境中会消磨志气,那么在困苦懊丧的环境中也一定会消磨志气

目录 一、做事的态度 二、学习与未来 三、发挥其个性之特长&#xff0c;以靖献于社会 四、鼓励相信孩子 五、犯错 六、身体健康 七、做事 八、与费用相关 九、在困苦中求快活 十、让孩子自由决策与建议 十一、处事态度&#xff1a;不要悲观 十二、时事分析 一、做事…