TLS全称是Transport Layer Security,是用来替代SSL的,是一种密码协议,用来提供计算机之间交互的安全通信。主要用于https通信,也用于email,即使通信等。


TLS握手

TLS握手通常分为2种方式,一种是基本的握手(具体可参照下图),另一种是客户端服务端握手(因为这种用的少,就不细讲)


通过上图可知,我们这里说的TLS握手主要讲的是最基本的TLS握手,即只使用服务器的证书来进行加密,具体步骤如下:

1.客户端与服务器之间通过3次握手建立连接

2.协商阶段

a. client发送一个ClientHello消息给server,这个消息包含了client支持的最高的TLS协议版本,一个随机数,当前client支持的密码组列表和建议的压缩算法

b.server发送一个ServerHello消息给client,这个消息包含了TLS协议版本,一个服务器随机数,根据客户端支持的密码组列表最终选择的密码和最终选择的压缩算法。

c.server发送Certificate(证书)消息

d.server发送ServerKeyExchange消息

e.server发送ServerHelloDone消息,表明握手协商已经完成

f.client发送ClientKeyExchange消息,这个消息包含了PreMasterSecret(这个值是根据server发送的Certificate里面的public key通过加密生成的)和 public key。(注意在发送消息之前,client会对server发送的Certificate进行验证–可参考下面的数字证书,如果验证失败,则握手失败)

g.client和server根据client的随机数,server端的随机数和PreMasterSecret计算出一个共同的密码,这个共同的密码叫做master secret)


3.client发送ChangeCipherSpec记录,告诉server我后面发送的所有消息都会是加密的了

a.client发送一个已验证并且加密的Finished消息。包含了对之前消息的hash和mac

b.server对接收的Finished消息进行解密并验证hash和mac,如果验证失败,则握手失败


4.server发送ChangeCipherSpec消息,告诉client我后面发送的所有消息都会是加密的了

a.server发送一个已验证并且加密的Finished消息。包含了对之前消息的hash和mac

b.client 对接收的Finished消息进行解密并验证hash和mac,如果验证失败,则握手失败


5.应用阶段:此阶段说明TLS握手已经完成,后面所有发送的消息都会是加密的


数字证书

数字证书提供的subjectName(主题名称)设置当前证书的所有权,将当前访问的地址与证书所有权的地址进行对比,如果一样,则证书有效,如果不一样,则证书无效。同时也会对证书及其父类证书已知道根证书有效期进行对比,如果不在有效期内,则证书无效。


参考链接:

​https://sslhow.com/ssl-tls-handshake-process​