Https请求原理和步骤总结: 1、客户端 ——> 服务端 发起请求 2、服务端 ——> 客户端 发数字证书(数字证书里面包括 公钥、证书颁发机构、证书有效期、证书所有者、签名所使用算法、指纹以及指纹算法) 3、客户端 ——> 服务端 客户端拿到数字证书,就拿到了公钥,也能校验数字正式是否合法,证书的所有者是哪个机构 4、客户端 ——> 服务端 发送一个随机字符串(用户确认对方是否是冒牌货) 5、服务端 ——> 客户端 服务端拿到字符串,先用hash算法算出一个hash值,然后用私钥加密后发给客户端(这里先算hash值,对hash值加密而不是直接对字符串加密,是防止黑客多次向服务端发送随机字符串,得到加密字符然后找到加密规律,对私钥是一种保护措施) 6、客户端 ——> 服务端 客户端拿密文hash值,用公钥解密,同时计算随机字符串的hash值,两者比较相同,则说明与我通讯的是真正的服务端(因为RSA(公钥密码体制)的公钥和私钥都可用来加密和解密,并且一方的加密只有另一方才能解密,而私钥只有真正的服务端才持有,所以到此时,就能确定对方是真正的服务端,不是黑客/冒牌货) 7、客户端 ——> 服务端 已经确认了对方身份并建立了连接后,客户端生成一个对称加密算法和密钥,并用公钥对对称加密算法和密钥加密,然后传给服务端(由于私钥只有服务端拥有,所以客户端生成的对称加密算法和密钥不会被泄漏) 8、服务端 ——> 客户端 接收到对称加密算法和密钥,就可以用这套对称加密方式对数据加密与客户端完成通讯 9、服务端 ——> 客户端 第8步说到 服务端与客户端的数据传输用了一套只有彼此知道的对称加密算法和密钥,但是黑客依然能截获传输中的密文,虽然无法解密成明文,却可以对密文发起修改,要避免这种情况,服务端在传输数据时,先将明文用hash算法计算出一个hash值,然后用私钥将明文和这个hash值分别加密,传给客户端,客户端收到后,用公钥解密密文和加密的hash值,然后将得到的文明同样用hash算法算出一个hash值,两个hash值如果一样,就说明数据没被篡改。
小结: 1、https请求 主要有两个步骤,第一步用非对称加密 ras公钥密码体制建立起一个安全的通讯连接;第二步客户端生成一个对称加密算法和密钥传给服务端,然后用该套对称加密算法和密钥进行加密和解密数据,完成数据传输。 2、https请求 私钥只有服务端持有,公钥公开给到客户端;这里有个问题,就是服务端的公钥怎么给到客户端,并且要客户端能知道这个公钥就是我们真正的服务器的公钥?(因为可能会有冒牌货拦截了请求把自己的公钥给到客户端,然后验证自己的私钥也能通过)这里就需要数字证书这个东西;数字证书是世界权威的证书颁发机构颁发的,我们的设备在安装系统的时候,已经将这些数据证书安装到操作系统里面了,所以客户端在接收到服务端发来的数字证书时,能知道该数字证书是否是有效的,是否是受信任的数字证书;且能知道证书的所有者是哪个机构;(数字证书里面的内容是无法被证书发布机构以外的人篡改的,因为数字证书在发布时也有一套加密流程);
以上总结只是个人理解做的笔记,参考大神的文章链接:https://blog.csdn.net/ly131420/article/details/38400583
|