首先要说HTTP为什么是不安全的?
在我们手机和电脑进行http请求的时候,比如浏览器或者某个手机软件,它把一个HTTP的请求报文,发送给了服务器处理,处理之后返回一个响应报文,这样一个请求就结束了.但是这个请求是怎么到达对方服务器的呢?它可不是通过一个叫网线的东西,蹭的一下就到对方服务器了,不是这样的.在实际的网络中,你的每个消息,都会经过很多很多的中间节点,比如你家的路由器,或者你们小区的网关,这些节点,会以接力的形式,帮你一步步的去转发这些消息,一步步的让消息达到目标服务器.然而最终你的服务器,接受到这个消息他就知道,哦,谁谁给我发了一个什么什么消息,现在我去给它处理一下.那么这儿就有问题了,这些转发者,他们是怎么转发这些消息的?当然是我把消息转发给他,然后呢他再把消息原封不动的转发出去,对吧?但是,如果他是一个坏人,他把我的消息篡改了之后,再转发出去,那岂不是坏事了?比如我要转账给我大爷,但是这个坏人,他把我的消息篡改了,他把转账地址改成他自己的地址了,那我的钱不就跑到他的兜里去了吗?另外不只是篡改,单纯的窃听对于我们来说也是风险,比如我的账号和密码,在网对方服务器发送的时候,路上的每一个节点都能看到,这是不是很危险?而且其实不只是中间节点,网络上的其他节点,也是可以对消息进行窃听的,所以网络从本质上,就不可避免的,会让别人看到你发送和接受的信息,这个是HTTP不安全的原因之一.但是从这个角度解决问题是不现实的,我们总不能把网络结构改了吧?
那么就要说到HTTP不安全的另外一个原因.明文传输.
指的是把你的消息内容不做任何加工就直接传输.跟这个对应的有一个概念叫做加密.HTTPS就是通过加密来让消息变得安全,HTTPS把HTTP消息进行加密之后在传输,这样别人就算拦截到了,他拿到消息也看不懂,这样就做到了安全,具体来说,HTTPS是通过对称加密和非对称加密和hash算法共同作用,在性能和安全性上达到一个平衡,加密是会影响性能的,尤其是非对称加密.因为它的算法比较复杂.
那么加密了就安全了吗?
不是的HTTPS除啦对消息进行加密,还会对通信的对象进行身份验证,比如我在网页里面打开www.baidu.com,我需要知道我的这个访问对象真的就是百度的那个网站,而不是一个别的什么人,他拦截了我的网络请求,然后呢,给我转到了一个别的什么地址,这种拦截在HTTP里面是可以做到神不知鬼不觉,你客户端根本察觉不出来. 但是HTTPS引入了证书机制,通过证书链,你可以对你的访问对象进行身份验证,能够保证那个你所访问的对象,一定是你认为的那个对象,不会是别的一个谁,不然你的浏览器就会给你一个警告提醒,或者我们开发app,我们的代码就会报异常,那么这个证书链就会保证,不会被恶意的一方所欺骗.
既然加密传输这么好用,那么我干脆把HTTP加密传输不就完了?为什么我们要搞一个新东西叫HTTPS出来呢?
因为我们知道新东西总是伴随着各种问题的,比如兼容性,比如大众接受度,比如换代周期,所以新东西是尽量能不用就不用,这个我们都知道,那么如果你有这个问题,我要告诉你,实际上,HTTPS就是这么做的,HTTPS并不是一种新的协议,而是它使用了一种叫做TLS的安全层,一个额外的安全层,这个安全层,他提供了数据加密的支持,让HTTP消息,运行在这个安全层上面,就达到了安全,而运行在安全层面的HTTP,就叫做HTTPS,HTTP Secure