参考自:
SSL/TLS四次握手过程是怎么样的?
HTTPS、SSL、TLS三者之间的联系和区别
一.SSL/TLS 简介
SSL(Secure Socket Layer 安全套接层)是基于 HTTPS 下的一个协议加密层,用于解决 HTTP 在传输数据时使用明文而导致的不安全问题。
-
SSL 是 HTTP 之下,TCP 之上的一个协议层,是基于 HTTP 标准并对 TCP 传输数据时进行加密,所以 HTTPS 可以想成是 HTTP+SSL 的简称。
-
HTTPS 并不是新协议,而是让 HTTP 先和 SSL(Secure Sockets Layer)通信,再由 SSL 和 TCP 通信。
-
TLS 可以简单理解为 SSL 的升级版。在SSL更新到3.0时,IETF 对 SSL3.0 进行了标准化,标准化后的更名为TLS1.0(Transport Layer Security 安全传输层协议),可以说 TLS 就是SSL的新版本3.1,并同时发布"RFC2246-TLS加密协议详解",
SSL/TLS
二、SSL/TLS四次握手过程
1. 客户端发出连接请求
客户端先向服务器发出加密通信的 ClientHello 请求。其向服务器提供下面信息:
- 支持的协议版本,比如 TLS1.0 版本;
- 支持的加密方法,比如 RSA 公钥加密;
- 一个客户端生成的随机数(client random), 稍后用于生成对话密钥(session key)。随机数(client random) 客户端会保存,同时需要传送给服务端,随机数(client random) 需要跟服务端产生的随机数结合起来产生后面要讲到的 Master Secret。
2. 服务器回应
服务器收到客户端请求后,向客户端发出回应,这叫做 Serverhello。此步服务器主要做三件事:
- 确认使用的加密通信协议版本,比如TLS1.00版本。如果游览器与服务器支持的版本不一致,服务器关闭加密通信;
- 确认使用的加密方法(客户端所支持),比如RSA公钥加密;
- 将服务器证书、非对称加密的公钥,以及**一个随机数(Server random)**发送给客户端
3. 客户端回应
(1) 客户端收到服务器回应以后,首先验证服务器证书
验证手段就是执行如下三种检查:
- 检查证书是否已过期;
- 检查证书中的域名与实际域名是否一致;
- 检查证书是否是可信机构颁布的;
如果,上述过程中有任何一个环节发现问题,那么浏览器就会向访问者显示一个警告,由其选择是否还要继续通信。
(2) 验证完证书后处理
如果证书受信任,或者是用户接受了不受信的证书,浏览器会生成一串新的随机数(Premaster secret ),并用证书中提供的公钥加密,发送给服务器。
此时,浏览器会根据前三次握手中的三个随机数:
- Client random
- Server random
- Premaster secret
通过一定的算法来生成 "会话密钥" (Session Key) ,这个会话密钥就是接下来双方进行对称加密解密使用的密钥!
4. 服务端回应
服务端收到客户端的回复,利用已知的加密解密方式进行解密,服务器收到客户端的第三个随机数( Premaster secret) 之后,使用同样的算法计算出 "会话密钥" (Session Key)。
5. 握手完成后加密通信
整个握手阶段全部结束后,客户端与服务器进入加密通信,就完全是使用普通的 HTTP 协议,只不过用 "会话密钥" 加密内容。(非对称加密解密将不再使用,接下来完全由对称加密接手了,因为密钥已经安全的传送给了通信的双方)
三. 总结
SSL/TLS四次握手
- 客户端请求建立 SSL 链接,并向服务端发送一个随机数--Client random 和客户端支持的加密方法,比如RSA公钥加密,此时是明文传输。
- 服务端回复一种客户端支持的加密方法、一个随机数--Server random、授信的服务器证书和非对称加密的公钥。
- 客户端收到服务端的回复后利用服务端的公钥,加上新的随机数--Premaster secret 通过服务端下发的公钥及加密方法进行加密,发送给服务器。
- 服务端收到客户端的回复,利用已知的加解密方式进行解密,同时利用Client random、Server random和Premaster secret通过一定的算法生成HTTP链接数据传输的对称加密key -- session key。