SSL/TLS握手阶段四次通信过程
SSL/TLS会话首先由客户端发起,客户端发送ClientHello给服务器端表示请求建立SSL/TLS连接,这一步生成了第一个随机数,向服务器端传输了第一个随机数,自己的支持的TLS版本和自己支持的密码算法列表。
然后服务器端首先回复ACK表示接收到了,然后接收到ClientHello后,同样生成了一个随机数,并且返回给客户端自己支持的TLS版本,密码算法列表以及第二个随机数。
接下来服务器向CA申请公钥认证,CA使用自己的私钥给公钥添加数字签名后,将公钥和数字签名放到数字证书中还给服务器。服务器将数字证书信息发送给客户端,发送Server Hello Done表示工作完成。客户端接收到数字证书后,先返回ACK表示接收到了。
然后客户端拿出数字证书,使用CA实现准备好的公钥校验数字证书,判断证书可信度,如果可信,那么就从数字证书中拿出公钥,随后生成第三个随机数:pre-master,接着将第三个随机数经过公钥加密发送给服务器,服务器拿到第三个随机数后基于原来创建的私钥解密,取出第三个随机数后此时双方都有了三个同样的随机数。
其中,前两个是在没有安全保障下发送给对方的随机数,而第三个是在基于非对称通话上的随机数,然后双方基于自己的密码套接列表中相同的算法计算出相同的密钥。接着客户端发送Change Cipher Spec给服务器端请求切换为对称加密的公钥进行数据交换,然后发送Finished:所有握手数据的摘要。之后服务器端返回ACK表示收到。随后发送Change Cipher Spec改用会话密钥加密通信,同样返回Finished总结所有握手数据。最后客户端返回ACK表示收到,此时基于SSL/TLS的加密通话连接请求完毕,后面开始请求和响应。