TLS 1.3作为最新的传输层安全协议版本,引入了多项改进,以提高安全性和性能。本文将详细介绍SSL证书的TLS 1.3握手流程,包括其各个阶段的主要任务和优化措施。
Client Hello:握手的起点
当客户端尝试与服务器建立安全连接时,首先会发送Client Hello消息。这个消息包含了丰富的信息,为后续的协商奠定基础。
- 客户端支持的TLS版本:客户端会列出它所支持的TLS版本,如TLS 1.3、TLS 1.2等,让服务器从中选择一个双方都支持的版本进行通信。由于TLS 1.3在性能和安全特性上更优,若服务器也支持,通常会优先选择TLS 1.3。
- 随机数(Client Random):客户端生成一个随机数并包含在消息中。这个随机数在后续生成会话密钥的过程中发挥着关键作用,与服务器生成的随机数以及预主密钥一起,通过特定的算法生成最终用于加密通信数据的会话密钥。随机数的随机性和不可预测性对于保障密钥的安全性至关重要。
- 支持的密码套件列表:密码套件定义了加密算法、密钥交换算法和消息认证码算法等。客户端会提供一个它支持的密码套件列表,服务器从中选择一个双方都认可的套件。例如,常见的密码套件有TLS_AES_128_GCM_SHA256等,其中AES表示对称加密算法,128指的是密钥长度,GCM是认证加密模式,SHA256则用于消息认证码计算。
- 扩展字段:Client Hello消息还可能包含各种扩展字段,如服务器名称指示(SNI)扩展,它允许客户端在同一条IP连接上与多个虚拟主机进行通信,通过在Client Hello中指定要访问的服务器域名,服务器可以根据该信息提供对应的证书和配置。此外,还可能包含椭圆曲线参数扩展,用于指定客户端支持的椭圆曲线类型,以便进行基于椭圆曲线的密钥交换。
Server Hello:响应与选择
服务器接收到Client Hello消息后,会根据自身的配置和客户端提供的信息进行响应,发送Server Hello消息。
- 选定的TLS版本:服务器从客户端支持的TLS版本列表中选择一个它认为最合适的版本,通常会优先选择TLS 1.3,然后在Server Hello中明确告知客户端选定的版本。
- 服务器随机数(Server Random):服务器也生成一个随机数并发送给客户端。与Client Random一样,Server Random同样用于后续会话密钥的生成,增加了密钥生成的随机性和复杂性。
- 选定的密码套件:服务器从客户端提供的密码套件列表中挑选一个双方都支持的套件。这个套件将决定后续通信中使用的加密算法、密钥交换方式和消息认证机制等。例如,如果服务器选择了TLS_AES_128_GCM_SHA256套件,那么后续通信将使用AES - 128加密算法进行数据加密,采用GCM模式保证数据的完整性和真实性,同时使用SHA256算法计算消息认证码。
- 证书:服务器会将自己的数字证书发送给客户端。证书包含了服务器的公钥、证书颁发机构(CA)的签名、证书有效期等信息。客户端通过验证证书的有效性,确保与合法的服务器进行通信。证书验证过程包括检查证书是否由受信任的CA颁发、证书是否过期、证书中的域名是否与要访问的服务器域名匹配等。如果证书验证失败,客户端通常会中止握手过程,提示用户存在安全风险。
密钥交换阶段
在TLS 1.3中,支持多种密钥交换方式,常见的有以下几种:
- ECDHE:这是一种基于椭圆曲线的临时密钥交换方式,提供了前向安全性。在这种方式下,客户端和服务器各自生成一对临时的椭圆曲线密钥对(私钥和公钥)。客户端在Client Hello消息的扩展字段中发送自己的椭圆曲线公钥(client_key_share),服务器在Server Hello消息中发送自己的椭圆曲线公钥(server_key_share)。双方通过各自的私钥和对方的公钥,运用椭圆曲线Diffie - Hellman算法计算出一个共享的秘密值(shared_secret)。这个共享秘密值与之前交换的Client Random和Server Random一起,通过特定的密钥派生函数(KDF)生成最终的会话密钥。由于每次会话使用的是临时生成的密钥对,即使未来某个时刻私钥被泄露,之前的通信内容仍然是安全的,因为攻击者无法根据已泄露的私钥计算出之前的会话密钥。
- PSK - only:预共享密钥方式。在这种方式下,客户端和服务器事先通过某种安全的方式共享了一个密钥(PSK)。在握手过程中,客户端在Client Hello消息中包含PSK相关信息,服务器验证PSK的有效性。如果验证通过,双方可以直接使用这个预共享密钥派生会话密钥,从而简化了握手过程,减少了通信开销。这种方式适用于一些对性能要求极高且双方已经建立了安全共享密钥机制的场景,如某些物联网设备之间的通信。
- PSK + ECDHE算法:即DH算法与预共享密钥相结合的方式。客户端在Client Hello消息中既包含PSK相关信息,也发送自己的椭圆曲线公钥(client_key_share)。服务器验证PSK后,如果选择使用PSK + ECDHE方式,会在Server Hello消息中发送自己的椭圆曲线公钥(server_key_share)。双方首先基于PSK派生一部分密钥材料,然后再通过ECDHE计算出另一个共享秘密值,将这两部分密钥材料结合起来,通过KDF生成最终的会话密钥。这种方式结合了PSK的快速性和ECDHE的前向安全性,在一些场景中能提供更好的性能和安全性平衡。
认证阶段
- 客户端验证服务器证书:如前所述,客户端接收到服务器发送的证书后,会对证书进行一系列严格的验证。验证过程包括检查证书链的完整性,即从服务器证书追溯到根证书,确保证书路径上的每个证书都由受信任的CA颁发;验证证书的有效期,确保证书未过期;对比证书中的域名与要访问的服务器域名是否一致,防止中间人攻击。如果证书验证通过,客户端继续进行握手流程;如果验证失败,客户端会中止握手,并向用户显示安全警告信息。
- 服务器验证客户端证书(可选):在一些需要双向认证的场景中,服务器也需要验证客户端的证书。例如,企业内部网络的某些应用系统,为了确保只有授权的客户端能够访问,会要求客户端提供证书进行身份验证。客户端在收到Server Hello消息后,如果服务器要求客户端证书,客户端会将自己的证书发送给服务器。服务器按照类似客户端验证证书的方式,对客户端证书进行验证,包括证书的有效性、证书链的完整性以及证书与客户端身份的关联性等。如果验证通过,服务器确认客户端的身份合法,继续进行后续的握手步骤;如果验证失败,服务器可能会中止握手或者采取其他措施,如记录非法访问尝试等。
会话密钥生成与应用数据加密
在完成密钥交换和认证阶段后,客户端和服务器基于之前交换的信息(如Client Random、Server Random、共享秘密值或预共享密钥等),通过密钥派生函数(KDF)生成会话密钥。会话密钥用于加密和解密后续传输的应用数据。
- 加密应用数据:客户端和服务器在握手完成后,开始使用协商好的加密算法和会话密钥对应用数据进行加密传输。例如,如果选择的密码套件是TLS_AES_128_GCM_SHA256,客户端会将应用数据按照AES - 128加密算法进行加密,并使用GCM模式生成消息认证码,确保数据在传输过程中的机密性和完整性。加密后的数据包被发送到网络中,经过网络传输到达服务器。
- 解密应用数据:服务器接收到加密的数据包后,使用相同的会话密钥和对应的解密算法(如AES - 128解密)对数据进行解密,并通过GCM模式验证消息认证码的正确性。如果验证通过,服务器能够正确获取原始的应用数据,进行后续的处理;如果验证失败,服务器会丢弃该数据包,因为数据可能在传输过程中被篡改或者密钥不正确。
Session Resumption的优化
Session Resumption旨在优化客户端与服务器之间的后续连接,减少不必要的握手开销,提高连接建立的速度和效率。
- 会话ID和会话票证:在首次握手成功后,服务器可以为本次会话分配一个唯一的会话ID(Session ID),并将其发送给客户端。同时,服务器还可以生成一个会话票证(Session Ticket),这是一个经过服务器加密签名的包含会话相关信息(如会话ID、加密参数、有效期等)的票据。客户端可以选择将会话ID或会话票证存储在本地,以便在后续连接时使用。
- 基于会话ID的恢复:当客户端再次连接到同一服务器时,如果客户端存储了之前的会话ID,它可以在Client Hello消息中包含该会话ID。服务器接收到Client Hello后,检查会话ID是否有效且对应的会话信息是否仍然存在。如果有效,服务器可以直接恢复之前的会话状态,跳过大部分握手步骤,直接进入应用数据传输阶段。这种方式虽然简单,但依赖于服务器对会话ID的存储和管理,如果服务器重启或者会话ID过期,可能无法成功恢复会话。
- 基于会话票证的恢复:如果客户端存储了会话票证,在后续连接时,客户端将会话票证包含在Client Hello消息中发送给服务器。服务器接收到会话票证后,使用自己的私钥解密票证,验证票证的有效性和完整性。如果验证通过,服务器可以根据票证中的信息恢复会话状态,快速建立安全连接。会话票证的方式相对更加灵活,因为它不依赖于服务器对会话信息的长期存储,客户端可以在不同的设备或进程中使用会话票证进行会话恢复,而且服务器可以更方便地管理会话票证的有效期和安全性。
SSL证书的TLS 1.3握手流程从Client Hello开始,经过Server Hello、密钥交换、认证等多个阶段,最终实现客户端和服务器之间安全连接的建立,并通过Session Resumption机制对后续连接进行优化。这一流程在保障网络通信安全的同时,不断提升性能和效率,适应了日益复杂和对安全要求极高的网络环境。理解和掌握TLS 1.3握手流程,对于网络应用开发者、安全工程师以及系统管理员来说,都是确保网络安全和优化网络性能的重要基础。
Dogssl.cn拥有20年网络安全服务经验,提供构涵盖国际CA机构Sectigo、Digicert、GeoTrust、GlobalSign,以及国内CA机构CFCA、沃通、vTrus、上海CA等数十个SSL证书品牌。全程技术支持及免费部署服务,如您有SSL证书需求,欢迎联系!