通讯协议(二)HTTPS协议

 

摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过程。

我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B:

通讯协议(二)HTTPS协议

这就是对称加密算法,其中图中的密钥S同时扮演加密和解密的角色。具体细节不是本文范畴。只要这个密钥S不公开给第三者,同时密钥S足够安全,我们就解决了我们一开始所定问题域了。因为世界上有且只有A与B知道如何加密和解密他们之间的消息。

但是,在WWW环境下,我们的Web服务器的通信模型没有这么简单:

通讯协议(二)HTTPS协议

如何确定对称加密算法

慢着,另一个问题来了,我们的服务器端怎么告诉客户端该使用哪种对称加密算法/p>

当然是通过协商。

 

通讯协议(二)HTTPS协议

虽然服务器端向A、B……的方向还是不安全的,但是至少A、B向服务器端方向是安全的。好了,如何协商加密算法的问题,我们解决了:使用非对称加密算法进行对称加密算法协商过程。这下,你明白为什么HTTPS同时需要对称加密算法和非对称加密算法了吧/p>

协商什么加密算法

要达到Web服务器针对每个客户端使用不同的对称加密算法,同时,我们也不能让第三者知道这个对称加密算法是什么,怎么办/p>

使用随机数,就是使用随机数来生成对称加密算法。这样就可以做到服务器和客户端每次交互都是新的加密算法、只有在交互的那一该才确定加密算法。

这下,你明白为什么HTTPS协议握手阶段会有这么多的随机数了吧。

如何得到公钥

细心的人可能已经注意到了如果使用非对称加密算法,我们的客户端A,B需要一开始就持有公钥,要不没法开展加密行为啊。

这下,我们又遇到新问题了,如何让A、B客户端安全地得到公钥/p>

我能想到的方案只有这些:

方案1:服务器端将公钥发送给每一个客户端

方案2:服务器端将公钥放到一个远程服务器,客户端可以请求得到

我们选择方案1,因为方案2又多了一次请求,还要另外处理公钥的放置问题。

公钥被调包了怎么办是一个鸡生蛋蛋生鸡问题/h3>

但是方案1有个问题:如果服务器端发送公钥给客户端时,被中间人调包了,怎么办/p>

我画了张图方便理解:

通讯协议(二)HTTPS协议

如果能解密,就说明这个公钥没有被中间人调包。因为如果中间人使用自己的私钥加密后的东西传给客户端,客户端是无法使用第三方的公钥进行解密的。

通讯协议(二)HTTPS协议

客户端能解密同一家第三机构颁发的所有证书:

通讯协议(二)HTTPS协议

数字签名,解决同一机构颁发的不同证书被篡改问题

要解决这个问题,我们首先要想清楚一个问题,辨别同一机构下不同证书的这个职责,我们应该放在哪/p>

只能放到客户端了。意思是,客户端在拿到证书后,自己就有能力分辨证书是否被篡改了。如何才能有这个能力呢/p>

我们从现实中找灵感。比如你是HR,你手上拿到候选人的学历证书,证书上写了持证人,颁发机构,颁发时间等等,同时证书上,还写有一个最重要的:证书编号!我们怎么鉴别这张证书是的真伪呢要拿着这个证书编号上相关机构去查,如果证书上的持证人与现实的这个候选人一致,同时证书编号也能对应上,那么就说明这个证书是真实的。

我们的客户端能不能采用这个机制呢这样:

通讯协议(二)HTTPS协议

当客户端拿到证书后,开始对证书中的内容进行验证,如果客户端计算出来的证书编号与证书中的证书编号相同,则验证通过:

 

通讯协议(二)HTTPS协议

拿到证书后,我们就可以将证书配置到自己的服务器上了。那么如何配置是具体细节了,留给大家google了。

也许我们需要整理一下思路

我们通过推算的方式尝试还原HTTPS的设计过程。这样,我们也就明白了为什么HTTPS比HTTP多那么多次的交互,为什么HTTPS的性能会差,以及找到HTTPS的性能优化点。

而上面一大堆工作都是为了让客户端与服务器端安全地协商出一个对称加密算法。这就是HTTPS中的SSL/TLS协议主要干的活。剩下的就是通信时双方使用这个对称加密算法进行加密解密。

以下是一张HTTPS协议的真实交互图(从网上copy的,忘了从哪了,如果侵权麻烦告知):

 

通讯协议(二)HTTPS协议

能不能用一句话总结HTTPS/h3>

答案是不能,因为HTTPS本身实在太复杂。但是我还是尝试使用一段话来总结HTTPS:

HTTPS要使客户端与服务器端的通信过程得到安全保证,必须使用的对称加密算法,但是协商对称加密算法的过程,需要使用非对称加密算法来保证安全,然而直接使用非对称加密的过程本身也不安全,会有中间人篡改公钥的可能性,所以客户端与服务器不直接使用公钥,而是使用数字证书签发机构颁发的证书来保证非对称加密过程本身的安全。这样通过这些机制协商出一个对称加密算法,就此双方使用该算法进行加密解密。从而解决了客户端与服务器端之间的通信安全问题。

 

 转载:也许,这样理解HTTPS更容易

转载于:https://www.cnblogs.com/warehouse/p/9333375.html

相关资源:世新砸蛋抽奖软件V2.3.10官方安装版-其它代码类资源-CSDN文库

来源:dlx29376

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月16日
下一篇 2018年6月16日

相关推荐