Http与Https
(本文适合了解过http协议和网络传输协议,但还是不太明白的)
首先,必须了解一件事,我们所看到的分步骤过程在网络通信中是一步完成的,这也是楼主当时很困惑的一点,这一点很重要,意味着在最终的交流过程中只要一步无法完成,那么整个通信将无法完成。
接下来从我们的Http传输协议来看:http是无连接,无状态的网络传输协议。首先来解释一下无连接,与无状态。了解Http协议的童鞋们都知道,Http有状态码哇,而且Http无连接又怎样能在网络传输呢???首先这中理解没有错,Http协议中的无连接和无状态的理解应该是这样的:
无连接:能在网络上传输的话,是需要建立连接,但是呢,连接是由传输层建立的,也就是大名鼎 鼎的“三次握手,四次挥手”过程了。
无状态:这里的状态并不是指状态码,而是指:本次请求不影响下次请求
所以呢,Http协议固然牛逼,但是它可以被抓包工具任意抓到而且还可以篡改包内信息,这是相当不安全的。怎么办呢???难道我给女朋友发的消息,舍友想看就看嘛???当然,作为一个优秀的程序员,我们是不会允许这种事情发生的,于是乎,便有了Https,这样一个超文本传输安全协议。Https是在Http的传输基础上加了一层SSL/TSL层。其实根据某老师说这一层不是SSL更多的用的是TSL协议,当然这也都无所谓啦,我只要我发给女朋友的话别被人听到就好了。接下来,我们来具体看看这一演变过程吧,我们用一个小故事来描述这一过程
(躲过舍友的监控成功告诉女神“么么哒”)。
下面有三个角色: 我:Client端 女朋友:Service端 舍友:黑客
第一步:只用Http协议
只用Http的话,你的骚话相当于“裸奔”状态,可能刚发出去你们宿舍一号床就看见了。
第二步:简单加密
于是我们想了一个办法,给女神一个密钥,只有女神和你知道。这样既简单又粗暴。那么问题来了,女神可是女神,追她的屌丝可不止你一个,于是每个人都给女神一把密钥,时间长了,女神也不知道特么这个“么么哒”是谁发的,于是女神想了一个办法,如下图:
第三步:对称加密
如图所示,女神给每个想追她的人一把公钥进行加密,而她自己有一把私钥可以加密和解密所有公钥。看起来好像没啥问题,每个想追她的人女神都给你机会了,能不能成功约到就看你的实力了。
但是,这样便引出一个问题,女神给每个人一把公钥,可以解密于是你的情敌也拿到一把公钥,就会出现这样的问题:
就像这样,你的情敌用私钥解密了女神给你的“么么哒”,并且接下来他可以伪装成你去和你女神通信,这样对你和你女神来说都不安全。
还有就是公私钥的问题,你女神如何把你的公钥发给你呢(客户端如何拿到公钥)???
1.服务器把工公钥发送给每一个客户端。(这是最安全的方式,这样就属于服务器能够知道所有的用户谁有私钥)
2.服务器把公钥放到远程服务器,让客户端请求。
第四步:第三方认证
结合上面的问题我们总结一下对称加密与非对称加密:
1.非对称加密安全,但是它需要消耗大量资源。
2.对称加密不安全,可以被恶意破坏。
Https就是结合了两者的精华形成的传输规范。为了防止”钓鱼攻击“,还有”中间人攻击“等攻击,我们需要一个权威能够帮我们去区分这些。
于是我们便有了第三方认证系统,他相当于一个公证人,他有以下特点:
1.他不参与通信,但是他可以帮你们互相确认身份。
2.他不属于服务器端应该管理的范围,他完全属于一个独立的机构,甚至可以说在这里他的地位比服务器高,因为 他可以否认没有认证的服务器。
于是现在的通信就像这样:
哈哈,这是个正经的图,没有女神和你舍友之类的角色,因为这张图需要你记住,让我们来对照着图分析一下整个通信过程:
1.一个http报文上面写着“么么哒”.
2.SSL层进行用公钥进行加密.
3.先进行对服务器端的验证,服务器端把自己在第三方认证的证书发给客户端。
4.客户端在本地浏览器会有一个本地的验证方式,像这样:
5.接收到服务器端的安全证书本地校验完了,我们会生成一个随机数,并且用服务器端的公钥加密送出去。中间人相当于有一个不偷看你信息的老实人告诉你,这个是你女神。
6.服务器拿到此Key,从此就可以和你用这个Key与你进行交流,通过上述过程,你就可以和女神过上没羞没臊的生活了。
总结:
可以通过上图看到,Https经过了四次握手协议,才开始没羞没臊的传输消息,用我的例子可以解释为:
1.你是谁。
2.你女神,这是公证人证书,你看看。
3.哦,果然是女神本人,这是我们接下来通信的Key。
4.好的,我收到了。
最后,在啰嗦一句,这四次握手对于顶层的用户来说我们是看不见的,所以看似交流了这么多次,在我们眼中它只有一次。