经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库运维 » Windows » 查看文章
https协议详解
来源:cnblogs  作者:HYH_0112  时间:2018/9/25 19:41:37  对本文有异议

 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协议在握手阶段使用的是非对称加密,在传输阶段使用的对称的加密。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号