HTTPS握手解析

  • TLS握手过程

    • HTTP 由于是明文传输,所谓的明文,就是说客户端与服务端通信的信息都是肉眼可见的,随意使用一个抓包工具都可以截获通信的内容。

    • 存在的风险

      • 窃听风险,比如通信链路上可以获取通信内容,用户号容易没。

      • 篡改风险,比如强制植入垃圾广告,视觉污染,用户眼容易瞎。

      • 冒充风险,比如冒充淘宝网站,用户钱容易没。

    • HTTPS 在 HTTP 与 TCP 层之间加入了 TLS 协议,来解决上述的风险。

    • 如何解决的呢

      • 信息加密: HTTP 交互信息是被加密的,第三方就无法被窃取;

      • 校验机制:校验信息传输过程中是否有被第三方篡改过,如果被篡改过,则会有警告提示;

      • 身份证书:证明淘宝是真的淘宝网;

    • 握手过程

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

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

      • 不同的密钥交换算法,TLS 的握手过程可能会有一些区别。

      • 因为考虑到性能的问题,所以双方在加密应用信息时使用的是对称加密密钥,而对称加密密钥是不能被泄漏的,为了保证对称加密密钥的安全性,所以使用非对称加密的方式来保护对称加密密钥的协商,这个工作就是密钥交换算法负责的。

    • RSA握手过程

      • 传统的 TLS 握手基本都是使用 RSA 算法来实现密钥交换的,在将 TLS 证书部署服务端时,证书文件其实就是服务端的公钥,会在 TLS 握手阶段传递给客户端,而服务端的私钥则一直留在服务端,一定要确保私钥不能被窃取。

      • 第一次握手

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

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

      • 第二次握手

        • 当服务端收到客户端的「Client Hello」消息后,会确认 TLS 版本号是否支持,和从密码套件列表中选择一个密码套件,以及生成随机数

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

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

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

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

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

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

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

      • 客户端验证证书

        • 数字证书和CA机构

          • 一个数字证书通常包含了:

            • 公钥;

            • 持有者信息;

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

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

            • 证书有效期;

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

          • 数字证书的作用

            • 是用来认证公钥持有者的身份,以防止第三方进行冒充。

          • 数字证书的来源和CA机构的

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

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

          • 数字证书签发

          • 证书链

            • 证书的验证过程中还存在一个证书信任链的问题,因为我们向 CA 申请的证书一般不是根证书签发的,而是由中间证书签发的

              • 比如百度的证书

            • 操作系统里一般都会内置一些根证书

            • 为什么需要证书链这么麻烦的流程?

              • 为了确保根证书的绝对安全性,将根证书隔离地越严格越好,不然根证书如果失守了,那么整个信任链都会有问题。

      • 第三次握手

        • 客户端验证完证书后,认为可信则继续往下走

        • 客户端就会生成一个新的随机数,用服务器的 RSA 公钥加密该随机数,通过「Client Key Exchange」消息传给服务端

        • 服务端收到后,用 RSA 私钥解密,得到客户端发来的随机数

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

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

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

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

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

      • 第四次握手

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

    • RSA算法的缺陷

      • 使用 RSA 密钥协商算法的最大问题是不支持前向保密

      • 因为客户端传递随机数(用于生成对称加密密钥的条件之一)给服务端时使用的是公钥加密的,服务端收到后,会用私钥解密得到随机数。所以一旦服务端的私钥泄漏了,过去被第三方截获的所有 TLS 通讯密文都会被破解。

      • 为了解决这个问题,后面就出现了 ECDHE 密钥协商算法,我们现在大多数网站使用的正是 ECDHE 密钥协商算法

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

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

相关文章

hadoop 查询hdfs资源信息的方式

hdfs dfsadmin -report [-live][-dead][-decommissioning]

二分练习题——晾衣服

晾衣服 题目分析 这里出现了“最小化干燥的总时间”,那么可以考虑用二分去做。 第一阶段二段性分析 假设当前需要耗费的时间为mid分钟,如果mid分钟内可以烘干这些衣服,那么我们可以确定右边界大于mid的区间一定也可以。但是此时我需要找的…

前缀和算法(1)

目录 一维前缀和[模板] 一、题目描述 二、思路解析 三、代码 二维前缀和[模板] 一、题目描述 二、思路解析 三、代码 724.寻找数组的中心下标 一、题目描述 二、思路解析 三、代码 238.除自身以外数组的乘积 一、题目描述 二、思路解析 三、代码 一维前缀和[模…

SQLynx发布3.0.0版本:带来更流畅便捷的SQL开发体验

作为新一代的一站式数据库管理开发工具, SQLynx自发布上线以来,一直受到广大用户的好评与鼓励。 为了给用户提供更高效、更便捷、更可靠的数据库管理开发体验,SQLynx今日正式发布3.0.0版本,同步在麦聪软件官网上线,全…

centos 安装 netstat

要在CentOS系统上安装netstat命令,您需要安装名为net-tools的软件包,因为netstat是该包中包含的一个工具。以下是使用系统自带的软件包管理器进行安装的步骤: 对于使用yum的CentOS(如CentOS 6或7): # 更新…

【AIGC】阿里云ecs部署stable diffusion

文章目录 安装anaconda安装cudagit 加速配置虚拟环境挂载oss端口开放启动服务其他controlnet显卡使用监控 参考资料 安装anaconda 安装Python、wget、git sudo apt install python3 python3-pip python3-virtualenv wget git 安装前置依赖 sudo apt-get install libgl1-mesa-…

0DAY漏洞是什么,如何进行有效的防护

零日漏洞,指的是软件或系统中未被公开的、未被厂商知晓的安全漏洞。这些漏洞未被修复,因此黑客可以利用它们进行攻击,而受害者往往无法防范。由于这些漏洞的存在时间很短,因此称之为“零日漏洞”,也称为“0day漏洞”。…

VMware ESXi部署macOS Monterey

正文共:1024 字 30 图,预估阅读时间:2 分钟 最早使用黑苹果是在2015年,装在了古老的Acer商务本上(老樹發新芽,acer tm 4750g裝黑蘋果);上次安装黑苹果是在两年前(VMware…

【爬虫基础】第3讲 常见浏览器User-Agent大全

User-Agent是浏览器或其他网络客户端发送给服务器的HTTP请求头字段,用于告诉服务器客户端的信息,包括操作系统、浏览器等。 以下是一些常见的浏览器User-Agent字符串: Chrome浏览器: Windows:Mozilla/5.0 (Windows NT…

淘宝详情数据采集(商品上货,数据分析,属性详情,价格监控),海量数据值得get

淘宝详情数据采集涉及多个环节,包括商品上货、数据分析、属性详情以及价格监控等。在采集这些数据时,尤其是面对海量数据时,需要采取有效的方法和技术来确保数据的准确性和完整性。以下是一些关于淘宝详情数据采集的建议: 请求示…

显示器刷新率

什么是刷新率以及为什么它很重要?- 英特尔 (intel.cn) 刷新率:显示器更新屏显图片的频率。 显示器每秒绘制新图像的次数。单位:Hz 刷新率为144Hz,指每秒钟刷新图像144次。 需要CPU和GPU能够迅速生成图像。 例如,显…

学习可视化比较好用的网站Apache ECharts

Apache ECharts 是一个基于 JavaScript 的开源可视化图表库,它提供了直观、交互丰富且可高度个性化定制的数据可视化图表。这个库最初由百度团队开源,并在 2018 年初捐赠给了 Apache 基金会,成为 ASF 的孵化级项目。在 2021 年 1 月 26 日&am…

四、在数据库里建库

一、查库 ##1)库:一个库就是一个excell文档,库里含有表,一个表就是一个excell的sheet. ##2)查看数据库实例中有哪些库 MariaDB [(none)]> show databases; -------------------- | Database | -------------------- | informat…

LabVIEW2024中文版软件安装包、工具包、安装教程下载

下载链接:LabVIEW及工具包大全-三易电子工作室http://blog.eeecontrol.com/labview6666 《LabVIEW2024安装图文教程》 1、解压后,双击install.exe安装 2、选中“我接受上述许可协议”,点击下一步 3、点击下一步,安装NI Package …

ChatGPT赋能大气科学:GPT与Python结合应用遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等

目录 专题一 AI领域常见工具讲解 专题二 POE平台及ChatGPT使用方法 专题三 提示词工程 专题四 科研常见应用场景 专题五 Python简明教程 专题六 GPT科研绘图 专题七 GPT辅助下载数据 专题八 遥感降水数据 专题九 数据产品评估 专题十 ERA5全球大气再分析数据 专题十…

Xilinx IDDR及ODDR使用和仿真

平台:Vivado2018 官方相关文档,ug471_7Series_SelectIO.pdf 关于IDDR与ODDR Input DDR Resource(IDDR) 外部的数据在时钟的上下沿同时传输数据,我们可以使用IDDR原语将输入的单bit数据转化为2bit的数据输出。同时数据速率变为原来的二分之一…

RabbitMQ简单介绍

什么是消息队列 消息队列是一种在应用程序之间传递消息的通信模式。它提供了一种异步的、可靠的方式来处理分布式系统中的消息传递。在消息队列中,消息发送者(Producer)将消息发送到队列(Queue)中,而消息接…

网络链路层之(1)基础概念

网络链路层之(1)基础概念 Author: Once Day Date: 2024年3月27日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSD…

文心一言官网入口:一站式解决AI疑惑,探索AI世界的无限可能

1. 背景介绍 随着人工智能技术的飞速发展,越来越多的企业和开发者开始关注并尝试使用AI技术。然而,AI技术的发展日新月异,各种算法和框架层出不穷,使得初学者和开发者往往感到困惑和无从下手。为了帮助广大开发者更好地理解和使用…

HarmonyOS应用/元服务发布流程

在发布HarmonyOS应用/元服务前,建议您在本地进行调试,以查看和验证应用/元服务运行效果,减少发布过程中可能遇到的问题。 华为支持您使用HUAWEI DevEco Studio自动化签名的方式对应用/元服务进行调试,总体流程如下。 配置签名信息…