TLS 协议流程
- 背景
- 简介
- TLS-RSA
- TLS-DH
- 总结
背景
随着年龄的增长,很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来,技术出身的人总是很难放下一些执念,遂将这些知识整理成文,以纪念曾经努力学习奋斗的日子。本文内容并非完全原创,大多是参考其他文章资料整理所得,感谢每位技术人的开源精神。
简介
《HTTPS 原理技术》 介绍了 HTTPS 的由来及其基本原理,本文介绍 HTTPS 使用到的 TLS(Transport Layer Security,传输层安全)协议的具体流程。
TLS 发展至今已经历 3 个版本:1999 年发表的 TLS 1.0、2008 年发表的 TLS 1.2 和 2018 年发表的 TLS 1.3,目前应用最为广泛的是 TLS 1.2。
TLS 流程根据使用算法的不同又区分为两类:TLS-RSA 和 TLS-DH。
TLS-RSA
说明:
- 客户端向服务器发送三个信息:客户端支持的 TLS 版本、客户端支持的加密套件列表、客户端生成的随机字符串(
client random
); - 服务器收到客户端请求后,返回包含以下三个信息的响应:包含服务器公钥的数字证书、协商确定的加密套件、服务器生成的随机字符串(
server random
); - 客户端收到服务器的响应后,验证服务器返回的数字证书合法性,生成一个新的随机字符串(
pre random
),使用服务器数字证书中的公钥加密后发送给服务器; - 服务器收到后使用私钥解密得到
pre random
; - 此时客户端和服务器都拥有三个相同的随机字符串:
client random
、server random
、pre random
,客户端和服务器使用已协商确定的算法对着三个随机数进行运算得到相同的密钥Session Key
,此密钥用于后续通信过程中的对称加密; - 客户端向服务器发送使用
Session Key
加密后的finished
消息; - 服务器向客户端发送使用
Session Key
加密后的finished
消息; - 基于 TLS-RSA 的安全连接建立成功,后续通信过程继续使用
Session Key
对称加密。
TLS-DH
说明:
- 客户端向服务器发送三个信息:客户端支持的 TLS 版本、客户端支持的加密套件列表、客户端生成的随机字符串(
client random
); - 服务器收到客户端请求后,返回包含以下三个信息的响应:包含服务器公钥的数字证书、协商确定的加密套件、服务器生成的随机字符串(
server random
); - 服务器使用私钥对
client random
、server random
、server params
进行签名,生成signature
,其中server params
为 DH 算法所需参数; - 服务器将
server params
和signature
发送给客户端; - 客户端首先验证服务器发回的数字证书的合法性,然后通过
client random
、server random
、server params
验证signature
; - 客户端将
client params
发送给服务器,client params
为 DH 算法所需参数; - 此时客户端和服务器都拥有
client params
和server params
,各自使用 ECDHE 算法计算出相同的pre random
; - 此时客户端和服务器都拥有三个相同的随机字符串:
client random
、server random
、pre random
,客户端和服务器使用已协商确定的算法对着三个随机数进行运算得到相同的密钥Session Key
,此密钥用于后续通信过程中的对称加密; - 客户端向服务器发送使用
Session Key
加密后的finished
消息; - 服务器向客户端发送使用
Session Key
加密后的finished
消息; - 基于 TLS-DH 的安全连接建立成功,后续通信过程继续使用
Session Key
对称加密。
总结
TLS-RSA 和 TLS-DH 的主要区别在于:是否需要传递生成最终会话密钥所使用的第三个随机字符串 pre random
,TLS 整个过程的安全也取决于这个随机字符串 pre random
能否被破解,虽然理论上只要服务器公钥足够长,那么基本可保证第三个随机字符串 pre random
不被破解,但为了足够安全,使用 DH 算法替代 RSA 算法,使得 pre random
无需传递,只需双方交换各自参数便可计算出 pre random
,避免了传递过程中可能存在的风险。