tls会话交互过程之一

一、过程概述

TLS(传输层安全)是一种用于在不安全网络上实现安全通信的协议。它的前身是SSL(安全套接层)。TLS通过一系列握手和消息交换过程来建立一个安全的通信通道。以下是TLS握手的基本步骤:

TLS 握手过程:

1. 客户端Hello(ClientHello): 客户端向服务器发送一个`ClientHello`消息,该消息包含以下信息:
    - TLS版本
    - 支持的密码套件(Cipher Suites)
    - 随机数(Client Random)
    - 可选的会话ID(用于会话恢复)

2. 服务器Hello(ServerHello): 服务器收到ClientHello后,选择一个客户端和服务器都支持的密码套件和TLS版本,并发送ServerHello消息。该消息包含:
    - 选定的TLS版本
    - 选定的密码套件
    - 随机数(Server Random)

3. 服务器证书(Server Certificate): 服务器发送其数字证书,以便客户端可以验证服务器的身份。

4. 密钥交换(Key Exchange): 服务器可能会发送一个密钥交换消息(取决于选定的密码套件)。这通常用于设置预主密钥(Pre-Master Secret)。(为了让客户端将生成的预主密钥加密,所以先把公钥传给客户端,就是这个过程

在密钥交换过程中,服务器的角色取决于所使用的密钥交换算法,甚至有些算法可能没有这个过程,例如RSA。以下是几种常见的密钥交换方法:

Diffie-Hellman(DH)或椭圆曲线Diffie-Hellman(ECDH):

① 参数和公钥发送(ServerKeyExchange): 服务器发送Diffie-Hellman参数(对于DH)或椭圆曲线参数(对于ECDH)以及其公钥


DHE(动态Diffie-Hellman)或ECDHE(椭圆曲线动态Diffie-Hellman):

② 参数和公钥发送(ServerKeyExchange): 服务器发送新生成的Diffie-Hellman或椭圆曲线参数以及公钥
 

5. 服务器Hello完成(ServerHelloDone): 服务器发送一个ServerHelloDone消息,表示它已完成握手消息的发送。

6. 客户端密钥交换(Client Key Exchange): 客户端发送一个密钥交换消息,该消息包含预主密钥或足够的信息以便服务器能推导出预主密钥。(预主密钥由客户端生成)

和第4步类似,只不过方向相反,当前是否交换要取决于加密算法,例如RSA:

因为"Certificate"消息包含服务器的数字证书,该证书内嵌有服务器的RSA公钥,所以不用"key exchange" 过程。

  1. 客户端密钥交换: 客户端生成一个预主密钥(Pre-Master Secret),并使用服务器发送到客户端的公钥对其进行加密,然后将加密后的预主密钥发送给服务器。这个步骤通常在"ClientKeyExchange"消息中完成。

后续(非客户端密钥交换过程):

  1. 服务器解密: 服务器使用其私钥解密这个加密过的预主密钥,从而获得原始的预主密钥。

  2. 生成会话密钥: 服务器和客户端都使用这个预主密钥(以及在握手过程中交换的其他随机值)来生成实际用于会话加密的主密钥。

7. 更改密码规格(Change Cipher Spec): 客户端和服务器都发送一个Change Cipher Spec消息,表示之后的通信将使用新协商的加密设置。

更改密码规格的作用:

  1. 确认加密设置: 在TLS握手过程中,客户端和服务器会协商一组加密算法和参数(称为“密码套件”)。"Change Cipher Spec"消息表示双方将开始使用这些新协商的设置。

  2. 启用加密: 在发送"Change Cipher Spec"消息后,所有后续的通信都将使用新的加密设置。这确保了数据的机密性和完整性。

  3. 会话层次: 这一步也标志着新的会话层次的开始,即从这一点开始,双方将使用新的会话密钥进行通信。

  4. 信号状态变更: 这个消息本身通常不加密,但它是一个信号,表明后续的消息(如"Finished"消息)将使用新的加密和完整性检查机制。

  5. 发送“Change Cipher Spec”消息:一旦双方确认了密码套件和所有必要的密钥材料,它们就会发送一个"Change Cipher Spec"消息。

  6. 加密生效:收到"Change Cipher Spec"消息后,双方将开始使用新的加密设置。这通常是通过使用先前协商的预主密钥(Pre-Master Secret)来生成会话密钥,然后使用这些会话密钥来加密和解密数据。

8. 完成(Finished): 客户端和服务器都发送一个Finished消息,该消息使用新的加密设置加密。

9. 应用数据(Application Data): 握手完成后,客户端和服务器就可以安全地交换应用数据。

密钥生成:

- 预主密钥(Pre-Master Secret): 在密钥交换阶段生成或交换。
- 主密钥(Master Secret): 使用预主密钥和两个随机数(Client Random和Server Random)生成。
- 会话密钥(Session Keys): 从主密钥派生出来,用于加密和解密数据。

主密钥通常是对称加密算法的密钥,用于加密应用数据。

这只是一个高级概述,TLS握手和密钥交换有多种变体,取决于使用的密码套件和配置。

二、概念解释

1.client random和server random

在TLS(传输层安全)握手过程中,Client Random和Server Random是两个非常重要的随机数,它们有多个用途:

密钥生成:

1. 生成主密钥(Master Secret): Client Random和Server Random与预主密钥(Pre-Master Secret)一起用于生成主密钥。主密钥是对称加密和解密数据的关键。

2. 生成会话密钥(Session Keys): 主密钥进一步用于生成用于加密和解密数据的会话密钥。这些会话密钥也依赖于Client Random和Server Random。

安全性增强

1. 防止重放攻击: 每次握手时都会生成新的Client Random和Server Random,这有助于防止重放攻击。

2. 确保唯一性: Client Random和Server Random的唯一性有助于确保每个TLS会话都是唯一的。

3. 增加熵: 这两个随机数增加了系统的熵(随机性),这是密码系统安全性的关键因素。

协议兼容性

1. 版本协商: 尽管ClientHello和ServerHello消息中包含了协议版本信息,但Client Random和Server Random也可以用于确保双方都在使用相同版本的TLS协议。

总体而言,Client Random和Server Random在确保通信安全、生成密钥和防止各种攻击方面起着至关重要的作用。它们是TLS安全性的基础组成部分。

你可能感兴趣的:(网络安全)