[转]HTTPS加密原理简介

原文链接:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html 0x00 对称加密与非对称加密 对称加密算法的加密和解密秘钥一样,不区分公钥和私钥,秘钥对外保密. 非对称加密算法的加密秘钥和解密秘钥不一样,公钥加密的内容只能由私钥解密,私钥加密的内容只能由公钥解密,其中私钥保密,公钥公开. 0x01 加密通信基本流程 Step1: 客户端–>服务器:你好 Step2: 服务器–>客户端:你好,我是服务器 Step3: 客户端–>服务器:向我证明你是服务器 Step4: 服务器–>客户端: 服务器生成随机字符串string 服务器用自己的私钥加密string,生成密文str 服务器把string和str发送给客户端 Step5: 客户端–>服务器: 客户端收到服务器的数据后,用服务器的公钥解密str,生成string1 客户端将string1和string对比,若一致则说明对方确实是服务器(因为私钥加密后的内容只能由公钥解密,私钥只有服务器持有) 客户端选择一个对称加密算法和一个秘钥,用服务器公钥将他们加密发送给服务器,告诉服务器后续的通信用这个秘钥加密,因为公钥加密的数据只有私钥能解密,所以对称加密的算法和秘钥只有服务器知道 Step6: 服务器–>客户端: 服务器用私钥解密收到的数据得到对称加密算法及其秘钥 Step7: 后面客户端和服务器就用对称加密算法进行通信 0x02 https通信大致原理 在上面的通信过程中存在一些问题:客户端如何获得公钥?如何确保获得的公钥就是服务器的? 如果黑客生成一对公私钥,然后发给用户的话同样可以完成上述认证流程。 而证书正是为了解决这一问题而存在的,只要改变上面的Step3和Step4即可引入证书。 Step1: 客户端–>服务器:你好 Step2: 服务器–>客户端:你好,我是服务器(同时发送证书) Step3: 客户端–>服务端: 判断证书是否为服务器的(证书中有服务器的公钥,若证书是服务器的则这个公钥就也是服务器的) 客户端向服务器发送随机生成的字符串string Step4: 服务端–>客户端: 服务器把string用自己的私钥进行加密,生成str 服务器把str发送给客户端 Step5: 客户端–>服务器: 客户端收到服务器的数据str后,用服务器的公钥解密,生成string1 客户端将string1和string对比,若一致则说明对方确实是服务器(因为私钥加密后的内容只能由公钥解密,私钥只有服务器持有) 客户端选择一个对称加密算法和一个秘钥,用服务器公钥将他们加密发送给服务器,告诉服务器后续的通信用这个秘钥加密,因为公钥加密的数据只有私钥能解密,所以对称加密的算法和秘钥只有服务器知道 Step6:



可以返回顶部