SSL/TLS 握手过程

SSL/TLS 握手过程是客户端和服务器之间建立安全连接的过程

主要包括以下步骤

  1. 客户端Hello (Client Hello)

    • 客户端发送支持的SSL/TLS版本、加密套件(cipher suites)、压缩方法和一个随机数(client random)给服务器。
  2. 服务器Hello (Server Hello)

    • 服务器从客户端支持的加密套件中选择一个加密套件,并返回给客户端,同时发送服务器的随机数(server random)。
  3. 服务器证书 (Server Certificate)

    • 服务器发送包含其公钥的数字证书给客户端。客户端使用这个证书来验证服务器的身份。
  4. 服务器Hello完成 (Server Hello Done)

    • 服务器向客户端发送一个消息,表示服务器端的Hello消息已完成。
  5. 客户端密钥交换 (Client Key Exchange)

    • 客户端生成一个预主密钥(pre-master secret),并使用服务器的公钥对其进行加密,然后发送给服务器。服务器使用其私钥解密预主密钥。
  6. 生成对称密钥 (Generate Symmetric Keys)

    • 客户端和服务器根据预主密钥、客户端随机数和服务器随机数生成对称密钥,用于后续的数据加密传输。
  7. 客户端完成 (Client Finished)

    • 客户端发送一个加密的“完成”消息,表示握手过程已完成。这条消息使用生成的对称密钥进行加密。
  8. 服务器完成 (Server Finished)

    • 服务器也发送一个加密的“完成”消息,表示握手过程已完成。这条消息同样使用生成的对称密钥进行加密。

SSL/TLS 握手过程的流程图

以下是SSL/TLS握手过程的详细流程图:

+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+
            |                                  
            | Client Hello                     
            | (支持的版本,加密套件,随机数)      
            v                                  
+-----------------------------------------------+
|                   服务器                      |
+-----------------------------------------------+
            ^                                  
            | Server Hello                     
            | (选择的版本,加密套件,随机数)    
            |                                  
            | Server Certificate                
            | (服务器公钥证书)                   
            |                                  
            | Server Hello Done                
            v                                  
+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+
            ^                                  
            | Client Key Exchange               
            | (用服务器公钥加密的预主密钥)       
            |                                  
            | [生成对称密钥]                    
            | Client Finished                   
            | (用对称密钥加密的完成消息)        
            v                                  
+-----------------------------------------------+
|                   服务器                      |
+-----------------------------------------------+
            ^                                  
            | [解密预主密钥并生成对称密钥]      
            | Server Finished                   
            | (用对称密钥加密的完成消息)        
            v                                  
+-----------------------------------------------+
|                    客户端                     |
+-----------------------------------------------+

[对称加密的数据传输开始]

在这个流程图中,握手过程的各个步骤依次进行,最终在客户端和服务器之间建立一个安全的加密通道,用于后续的数据传输。

对数字证书要有基本的理解

数字证书是一个电子文档,用于证明实体(如服务器、个人或组织)的身份。在SSL/TLS握手过程中,服务器使用数字证书来向客户端证明其身份,并提供其公钥,以便客户端加密敏感信息。

数字证书的内容

  1. 主体信息(Subject Information)

    • 包括持有证书的实体的信息,如组织名称、部门名称、国家、电子邮件地址等。
  2. 公钥(Public Key)

    • 证书持有者的公钥,用于加密数据或验证签名。在SSL/TLS握手过程中,客户端使用这个公钥加密预主密钥(pre-master secret)。
  3. 签发者信息(Issuer Information)

    • 签发证书的证书颁发机构(CA)的信息。
  4. 有效期(Validity Period)

    • 证书的有效期,包括开始日期和结束日期。
  5. 证书序列号(Certificate Serial Number)

    • 证书的唯一标识符。
  6. 证书使用范围(Key Usage)

    • 指定证书可以用于哪些目的(如数字签名、数据加密等)。
  7. 扩展信息(Extensions)

    • 其他附加信息,如证书策略、CRL(证书吊销列表)分发点等。
  8. 签名(Signature)

    • 证书颁发机构对证书内容的数字签名,用于验证证书的完整性和真实性。

数字证书的作用

  1. 身份验证

    • 客户端可以通过验证数字证书的签发者和签名,确保证书的真实性,从而确认服务器的身份。
  2. 公钥分发

    • 数字证书中包含服务器的公钥,客户端可以使用这个公钥加密敏感数据(如预主密钥),确保传输过程中的数据安全。

数字证书的结构

一个标准的X.509数字证书结构如下:

Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 123456789 (0x75bcd15)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3
        Validity
            Not Before: Jan 1 00:00:00 2024 GMT
            Not After : Jan 1 00:00:00 2025 GMT
        Subject: CN=example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:af:8c:45:3b:e2:ad:e2:29:ab:ee:6f:12:3f:ad:
                    59:e2:31:92:e3:ef:dd:7b:58:e2:ab:cb:13:57:aa:
                    ...
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         a3:9e:87:29:23:32:cd:50:30:b7:0b:69:ba:c7:3b:17:cd:18:
         62:aa:72:bd:e6:df:67:1c:2e:72:e6:df:14:39:b2:cd:22:75:
         ...

详细的握手过程示例

为了更好地理解数字证书在SSL/TLS握手过程中的作用,以下是一个详细的示例:

  1. 客户端Hello

    • 客户端发送支持的SSL/TLS版本、加密套件和一个随机数给服务器。
  2. 服务器Hello

    • 服务器选择加密套件,发送服务器的随机数和服务器的数字证书给客户端。
  3. 验证服务器证书

    • 客户端使用预先安装的CA公钥验证服务器证书的签名,确保证书未被篡改。
    • 检查证书的有效期和颁发者,确保证书有效且可信。
  4. 生成预主密钥

    • 客户端生成一个预主密钥,用服务器的公钥加密后发送给服务器。
    • 服务器使用其私钥解密预主密钥。
  5. 生成对称密钥

    • 客户端和服务器使用预主密钥、客户端随机数和服务器随机数生成会话密钥,用于加密后续通信。

通过这个过程,客户端和服务器之间建立了一个安全的加密通道,确保数据传输的保密性和完整性。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

natsort 自然排序

1、安装 pip install natsort 2、为什么使用natsort 而不是sorted 在python中只需要调用sorted函数就可以了,但是这个函数有一个缺点,就是它是按照从第一位开始的顺序排列的。意思是: wav_file [1.wav, 13.wav, 9.wav, 2.wav,"23.wav…

Golang | Leetcode Golang题解之第198题打家劫舍

题目&#xff1a; 题解&#xff1a; func rob(nums []int) int {if len(nums) 0 {return 0}if len(nums) 1 {return nums[0]}first : nums[0]second : max(nums[0], nums[1])for i : 2; i < len(nums); i {first, second second, max(first nums[i], second)}return se…

图形编辑器基于Paper.js教程04: Paper.js中的基础知识

背景 了解paper.js的基础知识&#xff0c;在往后的开发过程中会让你如履平地。 基础知识 paper.js 提供了两种编写方式&#xff0c;一种是纯粹的JavaScript编写&#xff0c;还有一种是使用官方提供的PaperScript。 区别就是在于&#xff0c;调用paper下的字对象是否需要加pa…

Linux核心基础详解(第13天)

系列文章目录 一、Linux基础详解&#xff0c; 二、网编三要素和SSH原理 三、shell编程&#xff08;补充&#xff09; 文章目录 系列文章目录前言一、linux简介二、虚拟机简介1、设置VMware网卡1.1 修改VMware中网络1.2 修改本地net8网卡ip 2、安装命令版裸机3、安装centos操作…

Elasticsearch:使用 Llamaindex 的 RAG 与 Elastic 和 Llama3

这篇文章是对之前的文章 “使用 Llama 3 开源和 Elastic 构建 RAG” 的一个补充。我们可以在本地部署 Elasticsearch&#xff0c;并进行展示。我们将一步一步地来进行配置并展示。你还可以参考我之前的另外一篇文章 “Elasticsearch&#xff1a;使用在本地计算机上运行的 LLM 以…

【MySQL】 -- 事务

如果对表中的数据进行CRUD操作时&#xff0c;不加控制&#xff0c;会带来一些问题。 比如下面这种场景&#xff1a; 有一个tickets表&#xff0c;这个数据库被两个客户端机器A和B用时连接对此表进行操作。客户端A检查tickets表中还有一张票的时候&#xff0c;将票出售了&#x…

DOM遍历

DOM 遍历是指在 HTML 文档中导航和定位元素的过程。通过 DOM 遍历&#xff0c;您可以在文档中移动并查找特定的元素&#xff0c;以便对其进行操作或者检索信息。 寻找子元素 //DOM遍历 const h1 document.querySelector(h1);//寻找子元素 console.log(h1.querySelectorAll(.…

华为鸿蒙正式杀入工业自动化,反攻开始了!

导语 大家好&#xff0c;我是社长&#xff0c;老K。专注分享智能制造和智能仓储物流等内容。 新书《智能物流系统构成与技术实践》 在近日举行的2024华为开发者大会上&#xff0c;华龙讯达与华为共同发布了基于鸿蒙内核技术的“HualongOS 华龙工业操作系统”&#xff0c;这一里…

运维.Linux下执行定时任务(上:Cron简介与用法解析)

运维专题 Linux下执行定时任务&#xff08;上&#xff1a;Cron简介与用法解析&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAd…

基于飞腾腾云S2500的ATS部署及调优指南(反向代理篇)

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力&#xff0c;聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域&#xff0c;包含了应用使能套件、软件仓库、软件支持、软件适…

TensorRt(6)yolov3.weight转换、onnx_graphsurgeon和c++ api实现添加NMS

前面博文 【opencv dnn模块 示例(3) 目标检测 object_detection (2) YOLO object detection】 介绍了 使用opencv dnn模块加载yolo weights格式模型的详细说明。 又在博文 【TensorRt&#xff08;4&#xff09;yolov3加载测试】 说明了如何将onnx编译为tensorrt格式并使用的方式…

[论文笔记]Mixture-of-Agents Enhances Large Language Model Capabilities

引言 今天带来一篇多智能体的论文笔记&#xff0c;Mixture-of-Agents Enhances Large Language Model Capabilities。 随着LLMs数量的增加&#xff0c;如何利用多个LLMs的集体专业知识是一个令人兴奋的开放方向。为了实现这个目标&#xff0c;作者提出了一种新的方法&#xf…

【Mac】iTerm for mac(终端工具)软件介绍及安装教程

软件介绍 iTerm 是 macOS 上一个非常受欢迎的终端仿真器&#xff0c;提供了比默认的 Terminal 应用更多的功能和定制选项。它是一款开源软件&#xff0c;主要用于命令行界面的操作和开发者工具。 主要特点和功能&#xff1a; 分页和标签&#xff1a; iTerm 允许用户在单个窗…

centOS 7安装gitlab

主要参考&#xff1a; CentOS-7 下 GitLab 安装部署教程_centos7 安装gitlab-CSDN博客 但是由于我本身服务器配置很小(2核2G)&#xff0c;所以运行的时候报错&#xff1a; execute[clear the gitlab-rails cache] (gitlab::gitlab-rails line 561) had an error: Mixlib::Sh…

vue3使用v-html实现文本关键词变色

首先看应用场景 这有一段文本内容&#xff0c;是项目的简介&#xff0c;想要实现将文本中的关键词进行变色处理 有如下关键词 实现思路 遍历文本内容&#xff0c;找到关键词&#xff0c;并使用某种方法更改其字体样式。经过搜寻资料决定采用v-html实现&#xff0c;但是v-h…

哈夫曼编码

一.哈夫曼树 哈夫曼树&#xff08;Huffman Tree&#xff09;是一种用于数据压缩的二叉树。它基于字符出现的频率构建&#xff0c;使得高频字符使用较短的编码&#xff0c;低频字符使用较长的编码&#xff0c;从而实现数据压缩。哈夫曼树也被称为最优二叉树或哈夫曼编码树。 哈夫…

中医背诵笔记(黄帝内经、伤寒论等)

目录 黄帝内经上古天真论今人和古人之差异&#xff08;精神内守&#xff0c;病安从来&#xff1f;&#xff09;男女每个年龄阶段身体状态至人、圣人、贤人 宣明五气篇五脏所藏 与 五脏所主七情与情绪与气的关系 天干地支天干地支与脏腑经络的关系 黄帝内经 上古天真论 今人和…

【模型】5分钟了解决策树是一个什么模型

本站原创文章&#xff0c;转载请说明来自《老饼讲解-机器学习》[www.bbbdata.com(https://www.bbbdata.com/ml) 决策树模型是机器学习中不可不学的模型之一&#xff0c;本文简单直接地快速讲解决策树是什么&#xff0c;如何实现。 一、决策树模型 决策树一般包括ID3决策树&am…

Qt:2.环境搭建

目录 1.搭建需要的三个组件&#xff1a; 2.下载Qt安装包&#xff1a; 3.安装qt&#xff1a; 4.配置环境变量&#xff1a; 1.搭建需要的三个组件&#xff1a; C编译器&#xff08;gcc&#xff0c;cl.exe等&#xff09;Qt的SDK&#xff1a;软件开发工具包&#xff0c;Windows…

java复习宝典,jdbc与mysql数据库

一.java 1.面向对象知识 (1)类和对象 类&#xff1a;若干具有相同属性和行为的对象的群体或者抽象&#xff0c;类是创建对象的模板&#xff0c;由属性和行为两部分组成。 类是对象的概括或者抽象&#xff0c;对象是类的实例化。 举例&#xff1a;例如车有很多类型&#xf…