首页 > 其他分享 >【学习笔记】TLS/SSL握手

【学习笔记】TLS/SSL握手

时间:2024-09-30 17:54:45浏览次数:9  
标签:TLS Handshake 握手 笔记 Server SSL Client 密钥

前言:本篇将介绍TLS握手的实际握手过程,TLS握手创建了Client和Server之间“被保护的通道”,2个单向通道用来保护批量数据的传输(通过Confidentiality、Integrity和Authentication),一个通道是从Client到Server,另一个是从Server到Client。本篇将介绍最基础的握手 - 即握手采用的是RSA密钥交换,并通过追条记录(Record)的形式来阐述该过程。

        在整个握手的过程中,Client和Server会交换并计算特定的值。上图两侧的框是双方所拥有的信息。开始时,Server已经拥有了证书、公钥和私钥,

1、Handshake:Client Hello

        第一条Record是Client Hello,里面包含5个部分

  • Version
    • 包含了Client所支持的TLS/SSL的最高版本
  • Random Number - 32 bytes / 256 bits
    • 前4个字节编码时间戳(防止两个拥有相同随机数的不同的Client Hello相互发送信息)
  • Session ID - 8 bytes / 32 bits
    • 00000...本篇中Client Hello的初始会话ID都是0
  • Cipher Suites
    • Client会发送它所支持的密码套件的列表,Server会从中挑选
  • Extensions
    • 如果有扩展的话会包含在握手中,本篇不包含扩展

2、Handshake:Server Hello

        收到Client Hello后,Server会发出Server Hello,和Client Hello一样,包含5部分

  • Version
    • 包含了Server所支持的TLS/SSL的最高版本
  • Random Number - 32 bytes / 256 bits
    • 前4个字节编码时间戳
  • Session ID - 8 bytes / 32 bits
    • Server生成的用于识别后续会话密钥的值
  • Cipher Suites
    • Server(从Client发送的列表中)挑选的密码套件
  • Extensions
    • 如果有扩展的话会包含在握手中,本篇不包含扩展

在Client Hello和Server Hello之后,Client和Server都获得了额外的信息

  • 两者都知道了互相支持的TLS版本。如果Client发送说它支持TLS 1.3,Server返回说它支持TLS 1.2,这就表明两者互相支持的最高的版本是TLS 1.2,两者将用TLS 1.2协议进行握手
  • 两者都知道了互相的随机数(Client Random、Server Random)
  • 两者也知道未来会用来参考本次会话的ID
  • 互相同意的用来保护这次TLS会话的密码套件

3、Handshake:Certificate

        这条记录包含了Server证书和完整的证书链,Client会收到证书和公钥。Client收到证书后会问自己2个问题:证书是否合法?(用CA公钥进行的签名可以验证其合法性,在此处Client拥有了其所需要的东西来验证该签名);Server是否是该证书的真正拥有者?(验证Server拥有与证书匹配的私钥,会由Key Exchange Record所验证)

4、Handshake:Server Hello Done

        这是一条空的Record,表明Server此时没有更多信息进行发送;然而,握手的其他变体可能会要求Server发送更多信息。

5、Handshake:Client Key Exchange

        Client Key Exchange有2个主要目的

  • 创建相互的密钥材料(例如,SEED Value种子值,Client和Server两者都用来生成会话密钥)
  • 证明Server确实是该证书的拥有者

        2个目的都将由特殊的值所达成,即 Pre Master Secret,预主密钥。上图中用红色虚线框描述,表明该值是加密发送的

  • Pre Master Secret 的生成
    • Client生成 Pre-Master-Secret (包含48个字节)
      • 2 bytes - TLS/SSL Version
      • 46 bytes - Random(随机生成的)
    • 之后,Pre-Master-Secret 会被Server的公钥进行加密(Client已经有了,因为前面的Record中Server已经发送了)
    • Pre-Master-Secret 被加密后进行在线传输,唯一能提取该加密信息的,是拥有与之相匹配的私钥的一方,即有对应私钥的Server
    • 现在,两者就都拥有了 Pre-Master-Secret
  • Pre Master Secret 的生效(在本例中,该值被用作种子值,来生成TLS会话密钥)
    • 双方都有了匹配的SEED Value
      • 种子值被用来生成会话密钥
      • 预主密钥被用来生成主密钥(Master Secret)[ 将其他值与PreMasterSecret相结合,这些值是“master secret”文字字符串(包含在RFC里了)、Client Random和Server Random,这4个值会相互结合来生成Master Secret ]
      • 主密钥被用来生成会话密钥 [ 将其他值与Master Secret相结合,这些值是“Key expansion”文字字符串、Client Random和Server Random,这4个值会相互结合来生成会话密钥 ]
        • 至少生成4个会话密钥(2套不同的密钥):
          • 保护Client发送信息的Client Encryption Key和Client HMAC Key
          • 保护Server发送信息的Server Encryption Key和Server HMAC Key
    • 特定加密协议需要 I.V. 即 Initializational Vector,初始化向量,这是(PRF)计算必要的I.V.的步骤
    • 计算涉及PRF - Pseudo Random Function,伪随机数函数
      • 生成任意长度的摘要的哈希算法

        到此,Client和Server双方都有了完全相同的会话密钥;但是,Client或Server并不知道另一方拥有相同的密钥。

        因而,余下的握手将给双方证明:另一方拥有正确的会话密钥。

6、Change Cipher Spec(不是Handshake Record)

        该记录表明Client已做好安全通话的一切准备(意味着它可以计算出会话密钥了)。我们可以阅读该记录,Client在说,它做好准备去更改由Client和Server所指定的密码。

7、Handshake:Finished

  • 向Server证明:Client有正确的会话密钥
  • 这会由特定的值(Encrypted Verification)来完成,过程如下
    • Client计算出之前所有握手记录(5个)的哈希,这5个记录会一起被哈希,生成Handshake Hash
    • 然后,Handshake Hash会与其他值(“client finish”字符串和Master Secret)相结合来生成验证数据(Verification Data)
    • 最终,验证数据会被Client Session Keys加密,生成加密验证
      • Server用自己的Client会话密钥副本进行验证
      • 验证Client和Server“看见”相同的握手记录
  • 理论上,Server也看见了之前5个握手记录(即Handshake Hash),“client finished”字符串,同时Server也有Mater Secret,这表明Server能合并得到相同的Verification Data;之后,Server收到加密验证后,用Client Session Key副本去进行解密,如果得到的结果和Server自己合并得到的验证数据相同,这就向Server表明,Client拥有相同的会话密钥。如果有人在Client发送出Client Hello后,Server接受到之前,进行篡改,两边的Verification Data会不匹配

8、Change Cipher Spec(不是Handshake Record)

        该记录表明Server已做好安全通话的一切准备(意味着它可以计算出会话密钥了)

9、Handshake:Finished

  • 向Client证明:Server有正确的会话密钥
  • 类似的过程
    • Client计算出之前所有握手记录(6个)的哈希,得到Handshake Hash
    • Handshake Hash会与其他值(“server finish”字符串和Master Secret)相结合来生成验证数据(Verification Data)
    • 验证数据会被Server Session Keys加密,生成加密验证
      • Client用自己的Server会话密钥副本进行验证

        在此刻的握手中,Client和Server都计算出相同的会话密钥,并且相互向对方证明自己有正确的会话密钥。这意味着两者可以开始分享批量数据了,并用协商好的会话密钥保护该数据。

        以上就是TLS握手(我们阐述的是basic handshake)的全部过程

        需要知道的是,TLS握手发生在我们每次访问HTTPS网站的时候,或者每次我们链接SSL VPN(Virtual Private Network)的时候

参考文献

1、网站:https://www.practicalnetworking.net/:practical TLS

标签:TLS,Handshake,握手,笔记,Server,SSL,Client,密钥
From: https://blog.csdn.net/Taki_UP/article/details/142487223

相关文章

  • 3. 算法笔记-对数器
    对数器是一个非常重要的自我验证技巧,其实现步骤如下:(1)方法A(2)方法B(3)随机样本产生器(4)用相同的样本验证方法A和方法B,比对结果是否一致。(5)若出现样本,使得结果不一致,查找原因,进行改进。(6)否则,方法验证成功。#include<vector>#include<cstdio>#incl......
  • 苹果笔记本安装双系统,如何开启虚拟化
    1开启以下Windows功能并重启Hyper-v虚拟机监控程序,如果不能开,也可以不开。2下载rEFInd-bin软件并解压https://sourceforge.net/projects/refind/ 我的下载目录是:D:\refind-bin-0.14.23编辑文件将refind目录下的refind.conf-sample的文件名改为refind.conf,notepad++打开......
  • Drain算法-笔记
    简介论文链接:https://jiemingzhu.github.io/pub/pjhe_icws2017.pdf算法原理图:有几点注意:根节点和叶节点实际是一套规则,并不包含日志数据真正的日志数据在叶节点之下的LogGroup第一层节点,基于假设:具有相同日志事件的日志消息可能具有相同的日志消息长度第二层节点,基于......
  • 最小生成树学习笔记
    最小生成树证明最小生成树构成的过程实际上是做\(n-1\)次操作,每一次合并一个点集,直到图中只剩下一个集合为止。要达到的就是让每一次合并的代价之和最小。那么我们实际上可以贪心地选择边权最小的并且能够合并集合的边(Kruskal算法),这个算法的正确性简单来说可以用反证法来证......
  • SSL证书必须要买吗?
    在当今数字化的时代,网络安全日益成为人们关注的焦点。SSL证书作为一种保障网络安全通信的工具,是否必须购买成为许多人心中的疑问。对于企业和商业网站来说,购买SSL证书往往是非常必要的。首先,从用户信任的角度来看,当用户访问一个带有SSL证书的网站时,浏览器地址栏会显示安全锁标志......
  • prometheus学习笔记之Grafana 常用操作
    一、Panel设置1.单位设置2.Panel名称修改3.曲线别名修改前修改后 4.曲线排序 5.曲线复制6.曲线静默 7.Panel复制当前dashboard中复制跨dashboard或folder在其他dashboard中操作8.设置告警线设置告警条件其他按提示填写如果触发告警规则则......
  • 卓越网络安全教程笔记-四-
    卓越网络安全教程笔记(四)P64:11.4-【Metasploit渗透】Metasploit基本使用方法-2-一个小小小白帽-BV1Sy4y1D7qv好接下来我们来看另外一个比较重要的命令,也是我们会经常会用到的一个命令啊,模块相关的命令,柚子的使用方法啊,柚子那么英文翻译过来呢是使用的意思哎,主要通过这个命令......
  • 白骑士的Java教学安全编程篇 12.4 SSL/TLS在Java中的应用
            SSL(SecureSocketsLayer)和TLS(TransportLayerSecurity)是用于保护网络通信安全的协议,广泛应用于互联网中的数据传输。Java提供了强大的API来实现SSL/TLS通信,确保数据在传输过程中不被窃听和篡改。本篇博客将详细介绍SSL/TLS的基本概念及其在Java中的应用,包括......
  • 除氟剂在锂电池回收处理过程中的应用(学习笔记)
    除氟剂在锂电池回收处理过程中的应用是至关重要的,主要目的是去除回收废液中的氟离子,以保护后续处理设备、提高回收金属的品质,并减少对环境的污染。以下是除氟剂在锂电池回收处理过程中的详细应用:一、应用背景在锂电池的回收处理过程中,废旧电池经过拆解、放电、破碎、浸出等......
  • 阳极氧化与废酸处理(学习笔记)
    一、阳极氧化概述阳极氧化(AnodicOxidation)是一种金属或合金的电化学氧化过程。在阳极氧化过程中,金属或合金(如铝及其合金)在相应的电解液(如硫酸、铬酸、草酸等)中,作为阳极,在特定条件和外加电流的作用下,表面形成一层氧化膜。这层氧化膜具有保护性、装饰性以及其他功能特性,如提高......