HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49
TLS四次握手的最终目的是通过安全的方式生成「会话秘钥」。
「会话秘钥」的生成需要以三个随机数 Client Random、Server Random、pre-master key 作为材料,再用商定好的加密算法计算得到。整个流程客户端一共发出4个消息,收到6个消息。
客户端发起 [ClientHello] 消息,该消息包含:
客户端支持的 SSL/TLS 协议版本(如"TSL1.2");
客户端生成的随机数 Client Random;
客户端支持的密码套件列表(如"RSA加密算法")。
服务器收到客户端发起的消息后,向客户端发出 [ServerHello] 消息,其中包含:
本次加密通信确定使用的 SSL/TSL 协议版本;
服务端生成的随机数 Server Random;
本次加密通信确定使用的加密算法;
随后,服务端又连续发送三个消息:
(1) [Certificate] 内含服务器证书;
(2) [Server Key Exchange] 内含服务器公钥;
(3) [Server Hello Done] 告知客户端响应结束。
客户端收到消息后,会使用内置的「CA公钥」解密数字证书,验证数字证书的真伪。当确认数字证书没有被伪造,就会生成 pre-master key ,并结合先前生成的两个随机数,根据加密算法计算出「会话秘钥」。随后客户端连续发起三个消息:
(1) [Client Key Exchange] 内含客户端生成的 pre-master key,会被「服务器的公钥」加密;
(2) [Change Ciper Spec] 告知服务端随后的消息都改用「会话秘钥」加密通信;
(3) [Encrypted Handshake Message] 告知服务端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给服务端验证握手过程中信息是否有被篡改。
服务端收到消息后,利用已有的两个随机数和 pre-master key,根据加密算法计算出「会话秘钥」,并连续发起两个消息:
(1) [Change Chipher Spec] 告知客户端随后的消息都改用「会话秘钥」加密通信;
(2) [Encrypted Handshake Message] 告知客户端握手结束,并将之前所有数据用哈希函数计算哈希值,再使用「会话秘钥」加密,交给客户端验证握手过程中信息是否有被篡改。
与上文提到的完全一致,其中 pre-master key 是客户端随机生成的一个随机数。
不支持前向保密:由于最后的 pre-master key 是客户端使用公钥加密后传递给服务端的,服务端再使用私钥解密,就能重新得到 pre-master key。而一旦服务器的私钥被泄露,过去截获的所有TLS密文都将被破解。
支持前向保密:由于每次通信使用的 私钥 都是 不同的,因此某一次通信的私钥被泄露并不会造成太大的影响。
提前通信:客户端无需等到服务端完成最后一次 TLS握手,就可以 提前发送 加密的HTTP数据了。
HTTPS是什么?加密原理和证书。SSL/TLS握手过程 - 空降06:49