【读书笔记】HTTPS与HTTP

文章:非对称加密与HTTPS

总结:

当你访问一个纯HTTP的网站(以及与这个网站有任何网络交互)时,你发出去一个请求。在这个请求到达网站服务器的路途上,不管是你家的路由器、你楼层的路由器、你小区的路由器、你当地电信的机房里,再一直到那个网站的服务器机房之间的所有网络设备上,都有你请求的数据通过。只要中间有任何一个设备想要把数据记录下来,它可以没有任何阻力的做到,因为这些数据是完全可见、没有经过任何混淆和加密的。

如果你发出的是一个注册请求,那这条链路上的每个网络设备都能看见你输入的账号密码;如果你发出的是一个转账请求,每个设备都能看见转账金额和目标。

那是不是只要大家都不在HTTP协议的网站上输入敏感信息,网络就变得安全了呢?

不是。除了你的请求,还有网站的响应数据也完整地走了一遍这条链路,只是方向相反而已。

HTTPS则完全避免了以上的问题。

HTTPS相比HTTP,在请求前多了一个「握手」的环节。在握手时,你和你想访问的网站会交换一个密钥;握手完成后,你的请求先用密钥加密才会发出去,网站服务器的响应会先用密钥加密再传给你。由于整条链路上的节点拿到的数据都是加密过的,所以他们即无法分析出源数据的内容,也无法篡改这个加密过的数据(如果一个节点篡改了加密后的数据,你和服务器都没办法用密钥解密出来,会认为数据是无效的)

握手环节交换的密钥难道不会被链路上的节点知道吗?密钥采用非对称加密!

非对称加密思想描绘了这样的美好场景:你的手上有两个密钥(一对密钥),它们有一定的关联,但没有办法通过其中一个算出另外一个。你把一个密钥紧紧地攥在手里,永远不向别人公布(私钥);把另外一个发送给我,当然,发送给我的途中,所有的设备都知道了这个密钥(公钥)。之后我用公钥加密了数据,并发送给你,你却可以奇迹般地用私钥解密它。更神奇的是,中间所有的设备,居然都不能用公钥解开它!

假如服务器要传输给我们的是一整张网页。使用非对称加密的方法加密时,这个包含数百k的数据被转换成一个巨大的整数,再对它做e次方的操作,这将是非常耗时的,所以HTTPS选择了握手时交换密钥的方案。

总的来说,握手过程中,服务器会发出一张证书(带着公钥),客户端用公钥加密了一段较短的数据S,并返回给服务器。服务器用私钥解开,拿到S。此时,握手步骤完成,S成为了一个被安全传输到对方手中的对称加密密钥。此后,服务器与我的请求响应,只需要用S作为密钥进行一次对称的加密就好。

上面的方案已经很完美了,但是有这么一种攻击方案可以轻松的突破这一套体系——中间人劫持

目前我们解决问题的思路,却是放在了公钥发放上,暂时绕开了这个问题。这就是证书体系(也是为什么你要去找证书签发机构花钱购买证书的原因)。

简单来说,一个HTTPS网站响应给我们的并不是一个公钥,而是证书。证书上包含了公钥,还包含了域名、签发机构、有效期、签名等等。

最后无奈地说,在破解了这么多数学上的难题后,HTTPS的安全性仍然保证在『证书签发机构一定都是很有良心的』这种脆弱的基础上。

猜你喜欢

转载自blog.csdn.net/lbbandcheng/article/details/81130619
今日推荐