HTTPS非对称加密

78 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第2天,点击查看活动详

大家好,我是bug郭,一名双非科班的在校大学生。对C/JAVA、数据结构、Spring系列框架、Linux及MySql、算法等领域感兴趣,喜欢将所学知识写成博客记录下来。 希望该文章对你有所帮助!如果有错误请大佬们指正!共同学习交流

作者简介:

非对称加密

对称加密存在的问题就是密钥会被其他设备拿到! 我们可不可以对密钥进行加密就解决了这个问题! 这时就引入了非对称加密方式!! 非对称加密就是套娃!我们再给密钥加上一把锁!

这里就引入了私钥和公钥:

  • 公钥:服务器和客户端大家共享的密钥,通过这个密钥可以对对称密钥进行加密!
  • 私钥:只有自己知道的密钥,通过这个密钥可以对对称密钥进行解密操作!

这里我们的公钥,服务器和客户端都会生成一个公钥,然后将公钥发出去,然后大家都拿到了这个公钥,然后私钥留着!然后当服务器和客户端生成一个对称密钥后,会将该对称密钥用这个公钥进行加密后发送,然后我们拿到数据报和加密后的对称密钥后,通过私钥对已经加密后的对称密钥进行解密,拿到对称密钥,然后通过对称密钥对数据报进行解密操作!

可能看完有点头大,就类似一个信箱,我们给邮递员一把锁(公钥),然后邮递员将信(对称密钥)放入信箱后,将信箱锁上(通过公钥对对称密钥进行加密),然后用户通过钥匙(私钥)将信拿到!

在这里插入图片描述 我们一开始将公钥发出去,如果要进行对称密钥传输,就应该事先通过公钥对对称密钥进行加密后再进行传输!而这时中间设备拿到加密后的对称密钥和公钥也无济于事!公钥只能用来加密操作,不能解密! 然后我们的另一方拿到加密后的对称密钥后通过自己私有的私钥对对称密钥进行解密!然后就可以对数据报文进行解密操作了!

重点就是: 公钥(发出去)只能对对称密钥进行加密,私钥自己留着,用来对对称密钥解密!

难道这样就安全了嘛?如果有中间设备自己搞个公钥和私钥冒充会怎么样?

在这里插入图片描述

上面的过程就是中间人攻击,就是被黑客入侵的网络设备,会自己生成假冒公钥和私钥,黑客收到服务器发来的公钥后保存,将自己的公钥发个客户端,然后客户端将对称密钥用黑客的公钥加密,发个黑客,黑客通过自己的私钥解密,然后通过服务器的公钥进行加密发给服务器,如假包换!!!

中间人攻击如何解决呢?

这里存在的问题就是我们无法知道公钥到底是冒充的还是真的! 只要我们可以确定公钥的真实性,就可以解决这个问题! 我们联系实际生活,我们是如何确定一个人的身份呢? 我们可以通过这个人的身份证! 身份证可以造假,就想公钥可以冒充一样,但是我们可以通过身份证在公安区登记的信息,就可以知道这个身份证的真实性! 所以我们这里也是如此,我们引入了第三平台,通过这个第三平台给的证书,就可以保证这里公钥的真实性! 在这里插入图片描述 我们通过这个公证机构就可以避免中间人攻击了 当创建一个服务器后就去这个公证机构登记(类似人一出生就去登记信息),然后将这个公钥数据放在这个证书里发送(类似身份证),客户端拿到证书后去公证机构验明身份!然后再使用加密操作! 这里天天访问公证机构有点繁琐,使用在操作系统内部就有这个公证机构的认证方式,就可以进行本地认证!

这个非对称密钥这么好使,为啥不直接用来加密数据报呢?

这里好使是好使但是开销大,还得是对称密钥加密数据报效率高