https协议详解
https协议建立过程
1) 客户端首次发送请求时,由于客户端(浏览器等)对一些加解密算法的支持程度不一样,但是在tls传输中必须使用相同的加解密算法,所以在tls握手的阶段,客户端告诉服务器端自己支持的加密算法(加密套件list),客户端产生一个随机数存在客户端,并且传送给服务器,客户端的随机数要和服务器端的随机数结合起来产生master secret(秘钥)。
所以要返回的是:支持的协议版本,tls1.0;客户端生成的随机数(1);支持的加密方式;支持的压缩算法。
2) 服务器端在接受到客户端的请求之后,要确定加密协议的版本,以及加密的算法,然后也生成一个随机数(2),以及将自己的证书一并发送给客户端。
服务器端要提供的信息:协议的版本;加密的算法;随机数(2),服务器证书。
3) 客户端再次响应,首先对证书进行验证,验证通过之后,客户端会再次生成一个随机数(3),使用证书中公钥进行加密,并放一个(changecipherspec)编码改变的消息,以及前面所以消息的hash值,进行服务器验证,然后用新秘钥进行加密一段数据一并发送到服务器端,确保通信前无误。客户端使用前面两个随机数以及刚刚生成的随机素,使用与服务器确定的加密算法,生成一个session secret。
注:changecipherspec是一个独立的协议,体现在数据包中就是一个字节的数据,用于告知服务器端,客户端已经切换到之间协商好的加密套件中,准备使用之前协商好的加密套件加密数据进行传输。
4) 服务器再次响应,在接收到客户端传输过来的第三个随机数的加密之后的数据,使用私钥对这段数据进行解密,对数据进行验证,然后会跟客户端使用相同的方式生成秘钥。这时,服务器给客户端发送一个changecipherspec,告知客户端已经切换到协商的加密套件状态,准备使用加密套件和session secret加密数据,之后服务器端会使用session secret加密一段finish消息给客户端,已验证之前通过握手建立起来的加密通道是否成功。
5) 后续客户端和服务器之间的通信,确定好秘钥之后,服务器与客户端之间的通信就会通过商议好的秘钥进行加密,进行通信。
注:ssl协议在握手阶段使用的是非对称加密,在传输阶段使用的对称的加密。
上一篇: Linux下编译安装redis