文章目录
TLS握手过程
握手简述(以RSA为例):
- client hello:客户端给出TLS协议版本号,支持的加密算法、随机数Client random、扩展字段
- server hello:服务端确认双方可支持的加密算法,并把数字证书下发给客户端。同时也会生成一个随机数Server random
- 客户端验证证书的有效性,并重新生成一个随机数Pre-main secret,使用证书中的公钥加密随机数,发送给服务端
- 服务端使用私钥获取随机数
- 客户端与服务端根据约定的加密算法,使用前面的三个随机数,生成对话密钥Session key,用来加密后续会话。
TLS需要知道的名词
1.会话密钥(Session key)
这是握手的最终结果。它是对称密码的密钥,并允许客户端和服务器相互加密消息。
2.客户端随机(Client random)
这是由客户端创建的32个字节的序列。它对于每个连接都是唯一的,并且应该包含四个字节的时间戳,后跟28个随机字节。最近,谷歌浏览器切换为使用32个字节的随机数,以防止客户端指纹。这些随机值通常称为随机数(nonce)。
3.服务器随机数(Server random)
服务器随机数与客户端随机数相同,只是服务器生成的随机数相同。
4.Pre-main密钥(Pre-main secret)
这是一个48字节的数据块。它可以与客户端随机变量和服务器随机变量结合使用,以使用“伪随机函数”(PRF)创建会话密钥(Session key)。
5.密码套件(Cipher suite)
CipherSpecs 用于认证加密算法和信息摘要算法的组合,通信双方必须同意这个密码规范才能进行通信。而 CipherSuites 则定义了 SSL / TLS 安全连接中所使用的加密算法的组合,该组合包含三种不同的算法:
- 握手期间所使用的的密钥交换和认证算法 (最常用的是 RSA 算法)
- 加密算法 (用于握手完成后的对称加密,常用的有 AES、3DES等)
- 信息摘要算法 (常用的有 SHA-256、SHA-1 和 MD5 等)
CipherSuites是用于组合构成TLS连接的算法的唯一标识符。它为以下列出的每个功能定义一种算法:
- 密钥建立(通常是Diffie-Hellman变体或RSA)
- 认证(证书类型)
- 机密性(对称密码)
- 完整性(哈希函数)
例如,密码套件是“ ECDHE-ECDSA-AES256-GCM-SHA384”,它定义了一个使用以下内容的会话:
- Elliptic Curve Diffie-Hellman Ephemeral(ECDHE)密钥交换以建立密钥
- Elliptic Curve Digital Signature Algorithms(ECDSA)进行身份验证
- 256-bit Advanced Encryption Standard in Galois/Counter mode (GCM) 用于确保机密性
- 384位的SHA(安全哈希算法)确保完整性