现在世界上绝大多数网站都已经切换到了https,切换的原因很简单,因为https更加安全,而且由于它更安全,从http切换到https是一个必然的趋势,未来的某一天,https必然会完全的取代http。

要说https为什么是安全的,得先说一下http为什么是不安全的,他不安全在什么地方?

  我们的手机和电脑在进行http请求的时候,实际上是你的应用程序,比如浏览器或者某个手机软件,它把一个http的请求报文给发送给了服务器,然后服务器接收到这个请求后,去处理,处理之后再返回一个相对应的报文,这样一个响应报文就结束了。但是这个请求是怎样到达对方服务器的呢?它可不是通过一个叫做网线的东西蹭得一下就到对方服务器去了。

  在实际的网络中,你的每个消息都会经过很多很多的中间节点,比如家里的路由器,比如小区的网关…… 这些节点会以接力的形式,帮你一步步的去转发这些消息,一步步的让消息达到目标服务器,然后最终你的服务器接收到这个消息他就知道,谁谁谁给我发了一个什么什么消息,现在我要去给他处理什么的。那么,这就有问题了,这些转发者他们是怎么转发这些消息的呢?这当然是我把消息发给它,它再把消息原封不动的转发出去呀。理想中它是那么美好,然而……如果它是一个坏人,他把我的消息篡改了以后再转发出去,那怎么说?比如我要转账给我二大爷,但是这个坏人他把我的消息篡改了,他把这个转账地址改成了他自己的地址了,那我的钱不就都跑到他的兜里去了吗?另外,不只是篡改,单纯的窃听对于我们来说也是风险,比如我的消息是账号和密码,在往对方服务器发送的时候,路上的每一个节点都能看到,这听上去是不是很阔怕?而且其实不只是中间节点,网络上的其它节点也是可以对消息进行窃听的。网络 从本质上它就不可避免的会让别人看到你发送和接收到的消息,这也就是http不安全的原因之一。但是你想让别人看不到你的消息 这 是不现实的,网络的结构他就是这样子的,我们总不可能把网络的结构改了吧?

还有就是要说到http不安全的另外一个原因,明文传输。

  所谓明文传输,指的就是把你的消息内容不做任何加工就直接传输,与之对应的一个概念叫做加密,https就是通过加密来让消息变得安全。https把http消息进行加密以后再传输,这样就算别人拦截到了,他拿到了消息也看不懂,这样也就做到了安全。

  具体来说,https是由 对称加密和非对称加密还有hash算法 共同作用,来在性能和安全性上达成一个平衡。加密是会影响性能的,尤其是非对称加密,因为它的算法比较复杂。

  好了,有上课走神的小盆友就会问:既然加密传输这么好用,那我干脆把http加密再传输不就完事了吗?为什么我要搞一个新东西叫https出来呢?因为我们知道,新东西总是伴随着各种问题的,比如兼容性,比如大众接受度,比如换代周期,对吧?新东西成熟之前,我们是能不用就不用的呀。

  哈哈,如果有这样的疑问,那么我要告诉你,https就是这么做的。https它并不是一种新的协议,而是它使用了一种叫做TLS的安全层,一个额外的安全层,这个安全层它提供了数据加密的支持,让http消息运行在这个安全层上面,也就做到了安全,而运行在安全层上面的Http就叫做https —— http secure,https 也是http。

加密了就安全了吗?

  那,加密了就安全了吗?不是的,https除了对消息进行加密之外,还会对通信的对象进行身份验证,比如我在网页里面打开https://york-2016.github.io ,我需要知道我的这个访问对象真的就是我的那个网站,而不是别的一个什么男人,那个男人拦截了我的网络请求,然后给我转到了一个别的什么地址。这种拦截 在http里面是可以做到的,而且神不知鬼不觉的呢,从客户端是根本查看不出来的;但是https被拦截了也没啥,https引入了证书机制,通过证书链你可以对你的访问对象进行身份验证,能够保证你访问的那个对象一定就是你证书肯定的那个对象,而不会是别的那个什么什么男人。要不然,你的浏览器就会给你警告提醒,或者如果你是开发APP的,出现这种情况的话你的代码就会给你报异常。这样就保证了我们不会被恶意的一方欺骗到。