HTTPS 客户端与服务端的交互过程

2023-11-05

一、客户端向服务端发起 HTTPS 请求。请求中包含了请求头、请求主体等信息。

1、这一步就是 tcp 的三次握手;

二、服务端接收到请求后,发送数字证书给客户端,以便客户端验证服务端身份。

1、这一步是 SSL/TLS 协议的握手过程,其目的是建立一个安全的通信管道,以便客户端和服务端可以进行加密通信。在这个过程中,客户端和服务端交换证书,并协商加密算法、生成对话密钥等信息;

2、具体的握手过程如下:

(1)客户端向服务端发送 Client Hello 消息,包括 SSL/TLS 的版本号、支持的加密算法、随机数a等信息。

(2)服务端向客户端发送 Server Hello 消息,包括 SSL/TLS 的版本号、选择的加密算法、随机数b等信息。

(3)服务端向客户端发送数字证书,证明自己的身份。

(4)客户端验证数字证书的有效性,如果验证通过,则通过两个随机数a和b,生成一个随机数作为 Pre-Master Secret,(Master Secret 是保证数据机密性的重要参数,它不同于客户端随机数。客户端和服务端都可以根据 Master Secret 计算出会话所需要的各种密钥,用于加密、解密和认证数据)并使用服务端公钥加密后发送给服务端。

(5)服务端使用自己的私钥解密 Pre-Master Secret,生成对话密钥,用于后续的加密通信。

(6)客户端和服务端分别发送 Finished 消息,验证握手过程的完整性和正确性。

注意:在 SSL/TLS 协议握手的最后一步,客户端和服务器都会发送一个 "finished" 报文,用来确认握手过程中所使用的密钥是否正确,以及验证握手过程的完整性。

       具体来说,客户端和服务器在握手过程中都计算出了一个 Finished 消息,这个 Finished 消息包含了握手过程中的所有消息和密钥材料的摘要。客户端先发送 Finished 消息给服务器,服务器接收到后会验证摘要是否正确,如果正确则发送自己计算出来的 Finished 消息给客户端,客户端也会验证摘要是否正确。如果验证都通过,就说明握手过程成功,可以开始传输数据了。

       通过交换 Finished 报文,可以保证握手过程中使用的密钥材料是正确的,并且验证整个握手过程的完整性,防止被中间人攻击等安全问题。

(7)握手完成后,客户端和服务端使用对话密钥进行加密通信。

注意:建立ssl连接后,每一次请求和响应都会带有MAC来保证数据完整性和机密性

        MAC指的是消息认证码(Message Authentication Code),是一种用于验证消息完整性和真实性的技术。在计算机通信中,应用层发送的数据经过传输层和网络层,最终到达对端的应用层,如果不进行保护,中间可能会被篡改、重放、伪造等攻击。为了保护数据的完整性和真实性,应用层通常会在数据中添加一个MAC。

        MAC是通过对消息和一个密钥进行加密算法计算而生成的一段固定长度的数据。发送方在发送消息前,会先计算出MAC,并将它附加在消息中发送出去。接收方收到消息后,会计算出MAC,并与消息中的MAC进行比较。如果两者相等,就可以确认消息是完整、真实的;否则就可以认为消息已被篡改或伪造。通常,发送方和接收方之间需要共享同一个密钥来计算和验证MAC。

三、客户端发送一个随机数给服务端,服务端接收到后,也发送一个随机数,并使用这两个随机数生成会话密钥(也就是公开密钥加密中使用的公钥)。

四、服务端使用数字证书中的公钥对会话密钥进行加密,并将加密后的会话密钥发送给客户端。

五、客户端收到加密后的会话密钥后,使用数字证书中的私钥对其进行解密,获得会话密钥。

六、客户端对请求使用会话密钥对请求主体进行加密,并发送给服务端。

七、服务端对响应信息使用会话密钥对进行加密,对客户端发来的数据进行数字签名摘要,并发送给客户端。

八、客户端接收到响应后,使用会话密钥对响应进行解密,并对数字签名进行验证,以确保数据的完整性和认证性。

九、客户端和服务端结束本次连接,释放资源。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HTTPS 客户端与服务端的交互过程 的相关文章

随机推荐

  • MQTT

    http baike baidu com link url ZHdQftpTVAOwtrvsd x23l8hH1Xj i3su2hbhD4yEkMlYXJnefijw0zjfnvKY9I5oLdRI8zxlfCiBhakD fGKq MQT
  • 百融云预计2022年净利润同比翻倍 金融AI平台头部效应尽显

    2月15日 百融云创 06608 HK 发布2022年正面盈利预告 预期于截至2022年12月31日止年度录得非国际财务报告准则溢利 净利润 约2 86亿元人民币至2 93亿元人民币 较去年同期增长约103 至108 公告显示 公司主业营收
  • 房价预测(基于决策树算法)

    预测波士顿房价 第一步 导入数据 在这个项目中 将使用波士顿房屋信息数据来训练和测试一个模型 并对模型的性能和预测能力进行评估 我们希望可以通过该模型实现对房屋的价值预估 提高房地产经纪人的工作效率 此项目的数据集来自kaggle原始数据
  • Pyhton考单词程序_考单词工具

    说明 首先我们需要一个单词表的文本文档像这样 只要单词中没有空格就行 然后运行程序 选择单词表文件 开始考单词 正确会提示Right 错误提示Wrong 一秒钟后清屏 代码 main py from module opfile import
  • [1049]since it exceeds Excel‘s limit of 65,530 URLS per worksheet

    文章目录 since it exceeds Excel s limit of 65 530 URLS per worksheet pandas 写入excel 转换Url链接的两种方法 since it exceeds Excel s li
  • el-table 动态表格 + 动态合并多列单元格方法

    动态合并单元格 之前有篇文章写了 el table 通过 span method 方法实现合并单元格的方法 但是当时只写了合并第一列的 就有小伙伴询问 如果多列合并怎么办 刚好最近有个项目遇到了动态表格并且要合并多列单元格 在详细的记录一下
  • Ubuntu17.04禁用访客模式/忽略终端大小写

    在ubuntu17 04中禁用访客模式 只需一条命令就可以了 sudo sh c printf SeatDefaults nallow guest false n gt etc lightdm lightdm conf d 50 no gu
  • python matplotlib 画图参数简要说明

    文章目录 import matplotlib pyplot as plt 用来正常显示中文 否则中文是一堆方框 plt rcParams font sans serif SimHei 用来正常显示负号 plt rcParams axes u
  • 设计循环队列

    前言 队列中有一种特殊的存在 环形队列 其有一定的价值与意义 这篇文章主要由一道与其相关的例题来引出相关的知识内容 注 下述解题过程是用C语言实现 目录 一 题目简述 二 环形队列的简单介绍 三 环形队列的实现 1 数组实现 1 过程分析
  • java动态扩展_java栈内存动态扩展要怎么理解?要如何实现?

    小伙伴们知道如何在java栈中内存动态扩展吗 这是虚拟机中的一个概念 下面让我们一起来看看该如何实现吧 一 内存概念 在java中 我们一般会简单把java内存区域划为两种 堆内存与栈内存 其实这种划分是比较粗粒度的 其中栈内存就是指的是虚
  • 浅析C语言结构体及位段

    数据经常以组的形式存在 例如 学校需要了解每位学生的姓名 学号和成绩等 如果这些值储存在一起 访问起来会更加简单 但如果类型不同 就无法存储于同一个数组中 所以在C语言中可以使用结构把不同类型的值存储在一起 先来看看百度百科对结构体的定义
  • 数组小和问题

    描述 在一个数组中 每一个数左边比当前数小的数累加起来 叫做这个数组的小和 求一个数组的小和 例子 1 3 4 2 5 1左边比1小的数 没有 3左边比3小的数 1 4左边比4小的数 1 3 2左边比2小的数 1 5左边比5小的数 1 3
  • 【云原生之Docker实战】使用Docker部署Ferry开源工单系统

    云原生之Docker实战 使用Docker部署Ferry开源工单系统 一 Ferry介绍 1 Ferry简介 2 Ferry特点 3 Ferry系统功能 二 检查本地系统环境 1 检查docker版本 2 检查docker状态 3 检查do
  • thymeleaf 常量_thymeleaf全局常量定义

    微服务现在最流行的莫过于springboot 官方推荐两种模板语言 freemarker和thymeleaf 本文只介绍thymeleaf中如何定义全局常量 百度一搜thymeleaf的全局常量定义 都是让把常量写在 message 文件中
  • std::ifstream vShaderfile & vShaderfile.ifstream.exceptions(std::ifstream::badbit)

    一 利用 fstream ifstream类打开文件 string stringstream类读入流 写入string类 二 try catch 检测异常 1 Retrieve the vertex fragment source code
  • 与Power PMAC通讯

    与PMAC通讯 Power PMAC通讯 通用Internet协议套件概述 Power PMAC 网络协议套件的使用 启动Power PMAC SSH Telnet通讯 IDE通信与Power PMAC FTP访问Power PMAC 修改
  • 代码加密和反编译

    代码加密和反编译 概述 通过 NET编译的项目得到的dll文件 由于要翻译为虚拟机可以执行的中间语言IL 这种语言规则性比较强 很容易通过各种反编译软件翻译成源码 所以当部署到实际项目中就需要进行一些加密 公司的项目是 NET CORE框架
  • 谈谈自己对链表的理解

    先说一个大概念 物理结构区分数据结构 分为顺序存储 链式存储 逻辑上区分就是集合 线性 树形 图形 1 什么是链表 它是有数据域和和指针域组成 那么什么是数据域 就是存储数据的区域 那么什么是指针域 指针域其实就是指针 用来标记此数据的相邻
  • SaaSBase:最受欢迎的协同办公软件有哪些(上篇)

    在海量的协同办公软件中 企业该如何选择呢 不用担心 SaaSBase saasbase cn 来帮您 根据 SaaSBase saasbase cn 的数据统计 有较多的协同办公软件受到企业的欢迎 故小编将它们拆分为两篇为您揭晓 先看今天第
  • HTTPS 客户端与服务端的交互过程

    一 客户端向服务端发起 HTTPS 请求 请求中包含了请求头 请求主体等信息 1 这一步就是 tcp 的三次握手 二 服务端接收到请求后 发送数字证书给客户端 以便客户端验证服务端身份 1 这一步是 SSL TLS 协议的握手过程 其目的是