加密与安全_HTTPS TLS 1.2 连接(RSA 握手)的整个过程解读

ops/2024/11/13 16:03:47/

文章目录

  • HTTPS 数据传输的安全性保障
  • SSL/TLS 作为混合加密系统的典范
  • HTTPS TLS 1.2 连接(RSA 握手)的整个过程
    • TLS 握手过程解析
      • 1. TCP 三次握手 (最顶部的黄色部分)
      • 2. TLS 握手阶段 (红色部分)
        • 2.1 Client Hello
        • 2.2 Server Hello
        • 2.3 CA 证书验证
        • 2.4 Client Key Exchange
      • 3. Change Cipher Spec
      • 4. Client Finished & Server Finished
      • 5. 加密数据传输阶段
    • 关键技术点
  • 客户端怎么验证 CA 证书
  • 小结

https://img-blog.csdnimg.cn/direct/b0e521a878fb49a1882c7ea0f8afc933.png" alt="在这里插入图片描述" />


HTTPS 数据传输的安全性保障

  1. 机密性
    HTTPS通过SSL/TLS协议加密数据传输。具体流程如下:

    • 首先,客户端与服务器通过非对称加密(如RSA或ECDHE)协商出一个对称加密密钥。
    • 该密钥用于后续的通信数据加密,因为对称加密(如AES)相较于非对称加密更高效,尤其是处理大数据量时。非对称加密仅用于密钥交换,避免暴露实际的对称加密密钥。
  2. 完整性
    整性是通过散列算法(如SHA-256)保证的。SSL/TLS在发送数据之前会生成该数据的哈希值,并将其与数据一起发送。接收端收到数据后重新计算哈希值并与发送方的哈希值进行比较,若二者一致,说明数据未被篡改。否则,数据在传输过程中可能被篡改,通信会中断。

  3. 权威性
    数字证书用于验证服务器的身份。数字证书是由可信的证书颁发机构(CA)签发的,它包含服务器的公钥和身份信息。客户端通过验证服务器提供的证书,确保其通信对象是合法的服务器,而非冒充的中间人。证书的真实性由CA的签名保证,防止伪造和冒充。


SSL/TLS 作为混合加密系统的典范

SSL/TLS协议结合了对称加密和非对称加密的优势:

  • 使用非对称加密进行密钥交换,确保安全密钥协商。
  • 使用对称加密保护大规模数据传输的效率。
  • 通过散列算法保证数据的完整性,数字证书确保身份验证的权威性。

这个流程是现代加密系统设计的重要参考,尤其是在应用层数据加密系统中。如果要设计自己的加密系统,可以采用类似的方法:

  • 用非对称加密安全地交换对称加密密钥。
  • 用对称加密处理高效的数据加密。
  • 用散列算法和数字签名保护数据的完整性和权威性。

HTTPS TLS 1.2 连接(RSA 握手)的整个过程

https://i-blog.csdnimg.cn/direct/94ba9e73c3834f128a5f594e25097bb1.png" alt="在这里插入图片描述" />

TLS 握手过程解析

从图片来看,展示的是完整的 TLS握手流程,其中包括了CA 证书认证的相关部分。这个流程确保客户端和服务器之间的通信是安全的,并且数据传输过程中不会被篡改或监听。以下是对这个流程的详细解析:


1. TCP 三次握手 (最顶部的黄色部分)

  • SYN → SYN + ACK → ACK:这是标准的 TCP 三次握手,用于建立客户端与服务器之间的连接。在这个阶段,TLS 握手还未开始,主要是确保客户端和服务器能正常通信。

2. TLS 握手阶段 (红色部分)

2.1 Client Hello
  • 客户端向服务器发送 Client Hello 消息,其中包含:
    • 支持的协议版本(例如 TLS 1.2 或 1.3)
    • 客户端支持的加密套件(如 AES、RSA 等)
    • 一个随机数(用于后续生成密钥)
2.2 Server Hello
  • 服务器回应 Server Hello,其中包含:
    • 服务器选择的协议版本
    • 服务器选择的加密套件
    • 另一个随机数(和客户端的随机数组合用于生成对称密钥)
2.3 CA 证书验证
  • 服务器会发送自己的 数字证书,证书中包含服务器的公钥,并由一个可信的 CA(证书颁发机构) 签名。具体步骤如下:
    1. 服务器将自己的公钥发送给 CA。
    2. CA 使用其私钥对服务器的公钥进行签名,形成证书。
    3. 证书通过 中间证书根证书 的链式结构进行验证,确保服务器身份的合法性。
2.4 Client Key Exchange
  • 客户端生成一个 PreMasterKey,并使用服务器的公钥加密该密钥。
  • 客户端将加密的 PreMasterKey 发送给服务器,服务器使用自己的私钥解密后,双方可以生成相同的 MasterKey
  • 服务器和客户端根据之前的随机数和 PreMasterKey 生成对称密钥(MasterKey),用于后续的数据加密传输。

3. Change Cipher Spec

  • 客户端和服务器都发送 Change Cipher Spec 消息,表示后续的通信将采用对称加密,使用之前协商好的 MasterKey 进行加密。

4. Client Finished & Server Finished

  • Client Finished:客户端发送加密的 Finished 消息,表示握手阶段完成。
  • Server Finished:服务器也发送加密的 Finished 消息,表示握手完成。

5. 加密数据传输阶段

  • 一旦 TLS 握手完成,客户端和服务器使用生成的 MasterKey 进行对称加密通信,确保数据的机密性、完整性和不可抵赖性。

或者可以这么理解:

  1. 客户端告知服务端自己支持的密码套件(比如
    TLS_RSA_WITH_AES_256_GCM_SHA384,其中 RSA 是密钥交换的方式,
    AES_256_GCM 是加密算法,SHA384 是消息验证摘要算法),提供客户端随机数。
  2. 服务端应答选择的密码套件,提供服务端随机数。
  3. 服务端发送 CA 证书给客户端,客户端验证 CA 证书(后面详细说明)。
  4. 客户端生成 PreMasterKey,并使用非对称加密 + 公钥加密 PreMasterKey。
  5. 客户端把加密后的 PreMasterKey 传给服务端。
  6. 服务端使用非对称加密 + 私钥解密得到 PreMasterKey,并使用 PreMasterKey+ 两个
    随机数,生成 MasterKey。
  7. 客户端也使用 PreMasterKey+ 两个随机数生成 MasterKey。
  8. 客户端告知服务端之后将进行加密传输。
  9. 客户端使用 MasterKey 配合对称加密算法,进行对称加密测试。
  10. 服务端也使用 MasterKey 配合对称加密算法,进行对称加密测试

关键技术点

  • 非对称加密:用于安全地交换对称加密的密钥(PreMasterKey)。
  • 对称加密:用于加密实际的数据传输,因为其速度远快于非对称加密。
  • 数字证书:由 CA 签发,确保服务器的身份合法,防止中间人攻击。
  • 散列函数:确保数据的完整性,防止篡改。

客户端怎么验证 CA 证书

接下来,客户端和服务端的所有通信都是加密通信,并且数据通过签名确保无法篡改。那客户端怎么验证 CA 证书呢?

其实,CA 证书是一个证书链,可以看一下上图的左边部分:

https://i-blog.csdnimg.cn/direct/03b9ee7cd97947fb97b4ad9b85971f72.png" alt="在这里插入图片描述" />

  • 从服务端拿到的 CA 证书是用户证书,需要通过证书中的签发人信息找到上级中间证书,再往上找到根证书。

  • 根证书只有为数不多的权威机构才能生成,一般预置在 OS 中,根本无法伪造

  • 找到根证书后,提取其公钥来验证中间证书的签名,判断其权威性。

  • 最后再拿到中间证书的公钥,验证用户证书的签名。

这就验证了用户证书的合法性,然后再校验其有效期、域名等信息进一步验证有效性。


小结

TLS 通过巧妙的流程和算法搭配解决了传输安全问题:使用对称加密加密数据,使用非对称加密算法确保密钥无法被中间人解密;使用 CA 证书链认证,确保中间人无法伪造自己的证书和公钥

https://i-blog.csdnimg.cn/direct/85ca2a754b0d4ec49eb31f3466c66c3c.jpeg#pic_center" alt="在这里插入图片描述" />


http://www.ppmy.cn/ops/113800.html

相关文章

[深度学习]神经网络

1 人工神经网络 全连接神经网络 2 激活函数 隐藏层激活函数由人决定输出层激活函数由解决的任务决定: 二分类:sigmoid多分类:softmax回归:不加激活(恒等激活identify)2.1 sigmoid激活函数 x为加权和小于-6或者大于6,梯度接近于0,会出现梯度消失的问题即使取值 [-6,6] ,…

vue中动态引入加载图片不显示

1-require()引入图片 2-import引入图片 3-使用符合导致路径出问题 <img class"image" src"/assets/logo/logo.png" alt"" data-v-2e1598f9""> 并不能识别出来&#xff0c;最简单方法引入图片的时候使用全路径&#xff0c;不…

css设置overflow:hiden行内元素会发生偏移的现象

父级元素包含几个行内元素 <div id"box"><p><span>按钮</span><span>测试文字文字文字测试文字文字文字</span><span>看这里</span></p></div>#box p{width: 800px;font-size: 30px;}#box p span{disp…

从小白到大神:C语言预处理与编译环境的完美指南(上)

从小白到大神&#xff1a;C语言预处理与编译环境的完美指南&#xff08;下&#xff09;-CSDN博客 新鲜出炉~~&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;下篇在这里&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&#x1f446;&…

C++_数据结构详解

C 数据结构 C/C 数组允许定义可存储相同类型数据项的变量&#xff0c;但是结构是 C 中另一种用户自定义的可用的数据类型&#xff0c;它允许您存储不同类型的数据项。 结构用于表示一条记录&#xff0c;假设您想要跟踪图书馆中书本的动态&#xff0c;您可能需要跟踪每本书的下…

Spring 源码解读:实现@Scope与自定义作用域

引言 在 Spring 框架中&#xff0c;Scope 注解用于定义 Spring 容器中 Bean 的作用域&#xff08;Scope&#xff09;&#xff0c;即 Bean 的生命周期与其使用范围。通过不同的作用域&#xff0c;开发者可以控制 Bean 的创建频率及其共享方式。Spring 提供了几种常见的作用域&a…

【C++】探秘二叉搜索树

&#x1f680;个人主页&#xff1a;奋斗的小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言&#x1f4a5;一、二叉搜索树&#x1f4a5;1.1 特点&#x1f4a5;1.2 基本操作&#x1f4a5;1.2.1 插入…

Django学习实战篇五(适合略有基础的新手小白学习)(从0开发项目)

前言&#xff1a; 本章中&#xff0c;我们开始引入前端框架Bootstrap 来美化界面。在前面的章节中&#xff0c;我们通过编写后端代码来处理数据。数据之于网站&#xff0c;就相当于灵魂之于人类。而网站的前端就相当于人的形体外貌。其中HTML是骨架&#xff0c;而CSS是皮肤&…