SSL/TLS握手

news2024/11/27 6:11:48

文章目录

    • SSL/TLS
      • TLS历史发展
      • 层次结构
      • SSL/TLS握手协议
      • TLS1.2 Vs TLS1.3

安全通信协议是一类用于保护计算机网络上数据传输安全的协议。这些协议通过加密、身份验证和数据完整性机制来防止数据被窃听、篡改或伪造。以下是一些主要的安全通信协议:SSL/TLS, IPsec, SSH, HTTPS, PGP/GPG, DTLS, S/MIME

以下我们着重介绍SSL/TLS和HTTPS

SSL/TLS

SSL:Secure Socket Layer(安全套接层) 是用于两个通信应用程序之间提供安全连接的协议,目前SSL证书均已停用

TLS:Transport Layer Security (传输层安全协议),是SSL的升级版本,用于修复SSL安全漏洞,虽然TLS被广泛使用,但依然沿用SSL称呼

TLS历史发展

在这里插入图片描述

SSL1.0(1995年) 存在严重漏洞,未被公开发布

SSL2.0(1995) 首次公开发布版本,存在漏洞,如不完全的握手和容易遭受攻击

SSL3.0(1996) 易受POODLE攻击,已被认为不安全协议

TLS1.0(1999) 受BEAST攻击,逐渐被弃用

TLS1.1(2006) 增强了CBC模式保护,防止了某些攻击, 但目前逐渐被更新版本取代

TLS1.2(2008) 引入了更多加密算法支持,改进了密钥导出和签名计算方式,更加灵活安全,目前依然广泛使用,被认为是安全的

TLS1.3(2018) 大幅简化了握手过程,减少了延迟,引入了前向保密性(Forward Secrecy)作为默认特性,是目前的最新版本,广泛推行和应用

层次结构

SSL/TLS协议由多个子协议构成,每个子协议负责不同的功能

  • 握手协议(Handshake Protocol)
    • 负责建立和管理安全连接,包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换
  • 记录协议(Record Protocol)
    • 负责数据分片、压缩、加密和传输,确保数据的机密性和完整性。
  • 警报协议(Alert Protocol)
    • 对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型的错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告。
  • 变化密码规范协议(Change Cipher Spec Protocol)
    • 用于通知对方使用新的加密算法和密钥,一条消息表明握手协议已经完成。

SSL/TLS握手协议

SSL/TLS协议能够提供的安全目标主要包括如下几个:

  • 认证性——借助数字证书认证服务器端和客户端身份,防止身份伪造
  • 机密性——借助加密防止第三方窃听
  • 完整性——借助消息认证码(MAC)保障数据完整性,防止消息篡改
  • 重放保护——通过使用隐式序列号防止重放攻击

为了实现这些安全目标,SSL/TLS协议被设计为一个两阶段协议,分为握手阶段和应用阶段

在这里插入图片描述

  1. 客户端 Hello(ClientHello)[人话版:Client:我能理解的cipher suit有RSA/3DES等,我们使用什么cipher suit进行通信]
    • 客户端发送 ClientHello 消息,其中包含:
      • 支持的协议版本(如 TLS 1.2)
      • 支持的加密套件列表
      • 支持的压缩方法
      • 随机数
      • 其他扩展(如服务器名称指示 SNI)
  2. 服务器 Hello(ServerHello)[人话版:Server: 我们就用RSA/3DES进行通信吧]
    • 服务器响应 ServerHello 消息,其中包含:
      • 协议版本(如 TLS 1.2)
      • 选择的加密套件
      • 选择的压缩方法
      • 随机数
      • 其他扩展
  3. 服务器证书(Server Certificate)[人话版:Server: 这是我的身份证明,你看看]
    • 服务器发送其数字证书,包含公钥,客户端用来验证服务器的身份。
  4. 服务器密钥交换(Server Key Exchange 可选)[人话版:Server: 如果证书信息不足的话,我们使用这些信息来进行密钥交换吧]
    • 如果使用临时密钥交换算法(如 ECDHE 或 DHE),服务器发送密钥交换消息。
  5. 服务器证书请求(Server Certificate Request, 可选)[人话版:Server: 对了,也给我下你的身份证明吧]
    • 如果需要客户端身份验证,服务器请求客户端证书。
  6. 服务器握手结束(Server Hello Done)[人话版:Server: 问候到此结束]
    • 服务器发送 ServerHelloDone 消息,表示握手消息结束。
  7. 客户端证书(Client Certificate, 可选)[人话版:client: 给你我的证书]
    • 如果服务器请求,客户端发送其数字证书。
  8. 客户端密钥交换(Client Key Exchange)[人话版:client: 这是经过你的公钥加密后的预备主密码]
    • 客户端生成预主密钥,用服务器的公钥加密后发送给服务器, 预主密钥用于生成最终的会话密钥。
    • 服务端收到预主密钥后,会使用其私钥解密,客户端和服务器使用预主密钥和随机数生成主密钥,再派生出会话密钥。
  9. 证书验证(Certificate Verify, 可选)[人话版:client: 我就是持有客户端证书本人]
    • 如果客户端发送了证书,客户端发送此消息以证明其身份。
  10. 客户端更改密码规范(Client ChangeCipherSpec)[人话版:Client: 好的,我现在切换为我们协商好的密码进行后续通信]
    • 客户端发送 ChangeCipherSpec 消息,表示后续通信将使用协商好的加密算法和会话密钥。
  11. 客户端完成(Client Finished)[人话版:client: 握手协议到此结束]
    • 客户端发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。
  12. 服务器更改密码规范(Server ChangeCipherSpec)[人话版:server: 好的,我也要切换密码了]
    • 服务器发送 ChangeCipherSpec 消息,表示后续通信将使用协商好的加密算法和会话密钥。
  13. 服务器完成(Server Finished)[人话版:server: 好的,握手协议到此结束]
    • 服务器发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。

在这里插入图片描述

TLS1.3对握手过程进行了简化,减少了消息数量,整个握手过程如下

  1. 客户端 Hello(ClientHello)
    • 客户端发送 ClientHello 消息,其中包含:
      • 支持的协议版本(如 TLS 1.3)
      • 支持的加密套件列表
      • 支持的密钥共享方法(如 ECDHE)
      • 支持的签名算法
      • 支持的哈希算法
      • 随机数
      • 其他扩展(如服务器名称指示 SNI)
  2. 服务器 Hello(ServerHello)
    • 服务器响应 ServerHello 消息,其中包含:
      • 协议版本(如 TLS 1.3)
      • 选择的加密套件
      • 选择的密钥共享方法
      • 随机数
      • 其他扩展
  3. 服务器证书(Server Certificate)
    • 服务器发送其数字证书,包含公钥,客户端用来验证服务器的身份。
  4. 服务器证书验证(Certificate Verify)
    • 服务器发送证书验证消息,使用服务器的私钥对握手消息签名,证明其身份。
  5. 服务器握手完成(Server Finished)
    • 服务器发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。
  6. 客户端证书(Client Certificate, 可选)
    • 如果服务器请求,客户端发送其数字证书。
  7. 客户端证书验证(Certificate Verify)
    • 客户端发送证书验证消息,使用客户端的私钥对握手消息签名,证明其身份。
  8. 客户端握手完成(Client Finished)
    • 客户端发送 Finished 消息,包含握手过程的摘要,使用会话密钥加密。

TLS1.2 Vs TLS1.3

由上述握手过程可以看出,TLS1.3的握手过程比TLS1.2的握手过程简洁了不少,握手过程是两者的关键区别

  • Difference 1:往返时间(RTT)

    往返时间 (RTT) 是指信号从发送端到接收端再返回所需的时间。 在 TLS 等协议中,RTT 至关重要,因为它直接影响用户浏览器和网站服务器建立安全连接的速度。

    在 TLS 1.2 中,当浏览器连接到安全网站时,握手过程需要在客户端(浏览器)和服务器之间往返两次,然后才能开始安全地交换数据。

    TLS 1.2 中的两步握手会带来延迟,尤其是在客户端和服务器之间距离较远的情况下,延迟会更明显

    TLS 1.3号称 0-RTT, 通过合并客户端和服务端的 “Hello”信息,将客户端与服务端之间的往返次数从两次减少到了一次。

  • Difference 2:密码套件(Cipher suit)

    TLS 1.2 支持多种密码套件,提供各种加密、身份验证和散列算法组合。 但是,选择的丰富性增加了选择安全性较低的密码套件的风险,可能会使通信暴露于漏洞之中

    TLS 1.3 将支持的密码套件缩减到五个,全部基于关联数据验证加密(AEAD)原理。 这种简化旨在提高安全性和效率。

    LS 1.3 中受限但安全的密码套件选项降低了协商的复杂性,减少了无意中使用弱加密算法的可能性。

  • Difference 3:完美的前向保密(PFS)

    完美前向保密(PFS)是一种加密功能,旨在防止在长期密钥泄露的情况下暴露过去的通信。

    TLS 1.3 默认启用完美前向保密(PFS)。 这意味着,即使有人设法窃取了您安全通信所用的密钥,他们也无法解密过去的信息。 这就像定期更换门锁一样。

    目前,在 TLS 1.2 中,使用这种额外的安全功能是可选的。 因此,如果您没有特别选择,如果有人掌握了您的秘钥,他们就有可能解密并读取您以前的信息。

    从本质上讲,TLS 1.3 可确保您过去的数据传输无论如何都不会被锁定,与 TLS 1.2 相比提供了更高的安全级别。

  • Difference 4:密钥交换机制

    TLS 1.2 使用多种密钥交换方法,包括RSA(Rivest-Shamir-Adleman)和 Diffie-Hellman 方法。 RSA 包括服务器向客户端发送加密的预主密文,而 Diffie-Hellman 允许客户端和服务器通过开放信道建立共享密文。 不过,TLS 1.2 通常默认使用 RSA 进行密钥交换。

    现在,在 TLS 1.3 中,默认密钥交换机制发生了明显的变化。 该协议要求使用 Diffie-Hellman 密钥交换,特别是椭圆曲线变体 (ECDHE)。 这种方法可确保更高效、更安全地协商加密密钥。

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

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

相关文章

Android 屏幕旋转 处理 AsyncTask 和 ProgressDialog 的最佳方案

初始化数据 */ private void initData(Bundle savedInstanceState) { if (savedInstanceState ! null) mDatas savedInstanceState.getStringArrayList(“mDatas”); if (mDatas null) { mLoadingDialog new LoadingDialog(); mLoadingDialog.show(getFragmentMana…

CSS的 text-decoration

text-decoration text-decoration CSS 简写属性设置文本上的装饰性线条的外观。它是 text-decoration-line、text-decoration-color、text-decoration-style 和较新的 text-decoration-thickness 属性的缩写。 MDN text-decoration text-decoration 可以设置1到4个参数, 允许…

Type-C连接器厂商对检测实验室的要求及重要性解析

Type-C连接器厂商对检测实验室的要求与重要性 Type-C连接器作为一种高速、全功能的接口标准,被广泛应用于各类电子产品中。作为Type-C连接器的制造商,对于产品的质量和性能要求是至关重要的。为了确保产品符合规范并满足市场需求,Type-C连接…

Redis—Set数据类型及其常用命令详解

文章目录 一、Redis概述Set类型1 SADD:向集合(Set)中添加一个或多个成员2 SCARD:获取集合(Set)中成员数量3 SDIFF:获取多个集合之间的差集4 SDIFFSTORE:计算多个集合之间的差集,并将结果存储在指定的目标集合中5 SMEMB…

深度学习之数据集 Dataset总结

数据集 Dataset MindSpore提供了基于Pipeline的数据引擎,通过Dataset和Transforms实现高效的数据预处理。它提供了内置的文本、图像、音频等数据集加载接口,并提供了自定义数据集加载接口。此外,MindSpore的领域开发库也提供了大量的预加载数…

Android Studio无法连接夜神模拟器的解决方案

一、AS检测不到夜神模拟器 1、问题描述 在按照教程【如何安装和使用Android夜神模拟器】进入夜神的bin目录,输入连接命令回车后,终端显示的already connected to 127.0.0.1:62001,但是AS的Running Devices并没有显示夜神模拟器。 2、解决方…

自动驾驶仿真测试用例(完善版本)

进一步完善上述的测试用例,并根据不同的测试准备、车辆准备、车辆状态、车辆场景、车辆执行、可变因素、具体信号状态、通过标准和预期标准来详细描述每个测试用例。 用例编号测试类型测试项目测试描述车辆准备车辆状态车辆场景车辆执行可变因素具体信号状态通过标准…

从零实现GPT【1】——BPE

文章目录 Embedding 的原理训练特殊 token 处理和保存编码解码完整代码 BPE,字节对编码 Embedding 的原理 简单来说就是查表 # 解释embedding from torch.nn import Embedding import torch# 标准的正态分布初始化 也可以用均匀分布初始化 emb Embedding(10, 32) …

ubuntu 20.04 访问csdn报错 Secure connection failed

打扰了,csdn服务器的问题,和源没关系,后面又重新测试了一下。刚好那一刻网站连上了。 暂时没有好办法,等待一段时间就连上了,改host似乎也不太行。 问题原因: 我一边更新源 sudo apt update & apt up…

ANR灵魂拷问:四大组件中的onCreate-onReceive方法中Thread-sleep(),会产生几个ANR-

findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() { Override public void onClick(View v) { sleepTest(); } }); sleepTest方法详情 public void sleepTest(){ new Handler().postDelayed(new Runnable() { Override public void run() { Button but…

Spring Boot启动报错Lombok supports: sun/apple javac 1.6, ECJ

版本 idea 2023.3.4 <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version></dependency> 解决方式 File->Settings->Build, Execution, Deployment->Com…

秋招突击——6/22——复习{区间DP——加分二叉树,背包问题——买书}——新作{溢出元素、实现strStr()}

文章目录 引言复习区间DP——加分二叉树个人实现 背包问题——买书个人实现参考实现 新作移除元素个人实现参考思路 找出字符串中第一个匹配项的下标个人实现参考实现 总结 引言 今天做了一个噩梦&#xff0c;然后流了一身汗&#xff0c;然后没起来&#xff0c;九点多才起床背…

Android中屏蔽 电源键长按、Home键、Home长按

“电源键长按”&#xff08;globalscreen&#xff09; “Home键”&#xff08;homekey&#xff09; “Home长按”&#xff08;recentapps&#xff09; 我们可以使用广播来实现&#xff0c;如&#xff1a; [java] view plain copy print ? package com.jumpinus.test; im…

系统架构师概述

引言 系统架构设计师是项目开发活动中的众多角色之一&#xff0c;它可以是一个小组或者一个人或者是一个团队&#xff0c;架构师包含建筑师&#xff0c;设计师&#xff0c;创造者&#xff0c;缔造者&#xff0c;可以说架构师就是我们社会各个领域的创造者和缔造者。从组织上划分…

基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 PID控制器 4.2 积分分离PID控制器 4.3 滑模控制器 5.完整工程文件 1.课题概述 基于simulink的PEM燃料电池控制系统建模与仿真,对比PID,积分分离以及滑模控制器。 2.系统仿真结果 &#xff08;完…

华为---OSPF被动接口配置(四)

9.4 OSPF被动接口配置 9.4.1 原理概述 OSPF被动接口也称抑制接口&#xff0c;成为被动接口后&#xff0c;将不会接收和发送OSPF报文。如果要使OSPF路由信息不被某一网络中的路由器获得且使本地路由器不接收网络中其他路由器发布的路由更新信息&#xff0c;即已运行在OSPF协议…

如何在 Ubuntu 12.04 VPS 上安装和配置基本的 LDAP 服务器

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 LDAP&#xff08;轻量级目录访问协议&#xff09;是一种通过文件和目录层次结构管理相关信息的协议&#xff0c;它可以从集中位置管…

【嵌入式Linux】i.MX6ULL 时钟树——理论分析

文章目录 0. 时钟树结构0.1 参考手册 Chapter 18​: Clock Controller Module (CCM)0.2 时钟信号路径 1. 时钟源——晶振1.1 外部低频时钟 - CKIL1.1.1 CKIL 同步到 IPG_CLK 解释 1.2 外部高频时钟 - CKIH 和 内部振荡器1.3 总结1.4 缩写补充 2. PLL时钟2.1 i.MX6U 芯片 PLL 时…

Android Studio 安卓手机上实现火柴人动画(Java源代码—Python)

android:layout_marginLeft“88dp” android:layout_marginTop“244dp” android:text“Python” android:textSize“25sp” app:layout_constraintStart_toStartOf“parent” app:layout_constraintTop_toTopOf“parent” /> </androidx.constraintlayout.widget.…

基于顺序存储的环形队列算法库构建

学习贺利坚老师基于数组的环形队列 数据结构之自建算法库——顺序环形队列_下空队列q中依次入队列数据元素abc-CSDN博客文章浏览阅读5.2k次&#xff0c;点赞6次&#xff0c;收藏6次。本文针对数据结构基础系列网络课程(3)&#xff1a;栈和队列中第9课时环形队列的存储及基本操…