漫画:htts是如何保证一台主机把数据安全发给另一台主机 (2)

服务器用明文的方式给客户端发送自己的公钥,客户端收到公钥之后,会生成一把密钥(对称加密用的),然后用服务器的公钥对这把密钥进行加密,之后再把密钥传输给服务器,服务器收到之后进行解密,最后服务器就可以安全着得到这把密钥了,而客户端也有同样一把密钥,他们就可以进行对称加密了。

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

小白:例如:

服务器以明文的方式给客户端传输公钥的时候,中间人截取了这把属于服务器的公钥,并且把中间人自己的公钥冒充服务器的公钥传输给了客户端。

之后客户端就会用中间人的公钥来加密自己生成的密钥。然后把被加密的密钥传输给服务器,这个时候中间人又把密钥给截取了,中间人用自己的私钥对这把被加密的密钥进行解密,解密后中间人就可以获得这把密钥了。

最后中间人再对这把密钥用刚才服务器的公钥进行加密,再发给服务器。如图:

漫画:htts是如何保证一台主机把数据安全发给另一台主机

毫无疑问,在这个过程中,中间人获取了对称加密中的密钥,在之后服务器和客户端的对称加密传输中,这些加密的数据对中间人来说,和明文没啥区别。

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

数字证书登场

在刚才的讲解中,我们知道,之所以非对称加密会不安全,是因为客户端不知道这把公钥是否是服务器的,因此,我们需要找到一种策略来证明这把公钥就是服务器的,而不是别人冒充的。

解决这个问题的方式就是使用数字证书,具体是这样的:

我们需要找到一个拥有公信力、大家都认可的认证中心(CA)

服务器在给客户端传输公钥的过程中,会把公钥以及服务器的个人信息通过Hash算法生成信息摘要。如图

漫画:htts是如何保证一台主机把数据安全发给另一台主机

为了防止信息摘要被人调换,服务器还会用CA提供的私钥对信息摘要进行加密来形成数字签名。如图:

漫画:htts是如何保证一台主机把数据安全发给另一台主机

并且,最后还会把原来没Hash算法之前的个人信息以及公钥 和 数字签名合并在一起,形成数字证书。如图

漫画:htts是如何保证一台主机把数据安全发给另一台主机

当客户端拿到这份数字证书之后,就会用CA提供的公钥来对数字证书里面的数字签名进行解密来得到信息摘要,然后对数字证书里服务器的公钥以及个人信息进行Hash得到另外一份信息摘要。最后把两份信息摘要进行对比,如果一样,则证明这个人是服务器,否则就不是。如图:

漫画:htts是如何保证一台主机把数据安全发给另一台主机

这样,就可以保证服务器的公钥安全着交给客户端了。

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

其实,(有些)服务器一开始就向认证中心申请了这些证书了(有没有看过没有证书的网站在地址栏会被标出警告?),而客户端是,也会内置这些证书。如图:

漫画:htts是如何保证一台主机把数据安全发给另一台主机

当客户端收到服务器传输过来的数据数字证书时,就会在内置的证书列表里,查看是否有解开该数字证书的公钥,如果有则...,如果没有则....

漫画:htts是如何保证一台主机把数据安全发给另一台主机

漫画:htts是如何保证一台主机把数据安全发给另一台主机

有收获?不妨点个赞,让更多的人看到这篇文章!

文章首发于我的公众号「苦逼的码农」,更多精彩文章可以关注下我哦。

漫画:htts是如何保证一台主机把数据安全发给另一台主机

后台回复「666」送你一份我整理的电子书单

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpysjz.html