HTTP和HTTPS的区别

   我们介绍了很多关于HTTP的东西,但是现在访问网页的时候,大多数网页都是用的HTTPS协议,HTTP超文本协议被用在客户端和服务器之间传输信息,但是HTTP协议是以明文的当时来发送内容,并不提供任何加密方式。如果有攻击者拦截了浏览器和服务器之间发送的数据,就能读懂其中的数据信息,这样就就导致HTTP很不安全,所以HTTP协议就不适合传输敏感信息。为了解决这个问题就有了能够保护我们数据安全传输的协议HTTPS,中文全称叫做安全套接字层超文本传输协议HTTPS。

这里我们简单说一下HTTPS的发展历程。

小红和小蓝在网络上通过HTTP协议来传输信息,突然有一天他们发现,他们的信息都是可以被别人明文查看的,如果有人截取了那他们之间所说的秘密就会被别人知道,后来小红说:“不如我们弄一个加密算法,把我给你发的信息进行加密,然后当你收到信息之后,再通过咱们两个约定的算法进行解密”

HTTP和HTTPS的区别

小蓝自然认可了这个方法,但是小蓝想让小红赶紧把加密算法给他发过来,但是这时候小红犹豫了说,如果我就这样把加密信息发给你,那咱们的加密算法被别人截获了怎么办,这不等于没有加密吗?这就是HTTPS里边的对称加密算法,也就是加密算法和解密算法用的是同一套方法。自然对称算法还是有很大的缺点的。

之后发展的就是非对称算法(RSA),RSA就厉害了很多,他并不像对称算法那样,非对称算法是有一对钥匙,一个是保密的,叫做私钥,另一个是公开的叫做公钥,并且用对应私钥加密的数据,只有对应的公钥才能解密,用对应公钥加密的数据,只有对应的私钥才能解密。也就是说小蓝现在有两个钥匙,一个是只有自己知道的私钥,一个是全世界人都知道的公钥。

HTTP和HTTPS的区别

同样当小蓝给小红发送信息的时候,会在发送前用小红的方法进行加密,然后当小红收到信息之后用只有自己知道的私钥进行解密查看。

 这样的话,他们的信息就安全了很多,但是当他们尝试这种算法来加密一段时间就发现了一个问题,这种传输方式比对称的加密算法要慢了几百倍。这样就大大的降低了我们的传输效率。后来小蓝提到了一个方法,既然我们还是想通过对称算法,快速度的传输内容,我们为何不通过RSA非对称加密算法来安全的发送一份对称加密算法,之后我们就不用RSA了就用我们的对称加密算法,这样就解决了RSA传输速度过慢的问题。

就这样一直好好的传输着,突然有一天小黄问小蓝你能确定你发送信息的对象就是你想要传输的小红?小蓝说那肯定啊,我可是有他的公钥。小黄说:“那假如当小红给你发公钥的时候,有个中间人截获了小红的公钥,然后他把他的公钥冒充小红的发给你,这样你发送的信息不就用中间人的公钥进行加密了?这不就被他截获了?”

HTTP和HTTPS的区别

问题就出在了公钥的分发上,虽然这个是所有人都能看到的信息,但是有的人开来他是可以截获之后来干坏事的!这就又回到了最初的问题,但是和最初的又有一些不太一样,这里要做的是,怎么才能证明这个公钥就是小红的呢?小蓝说既然我们现实生活中都有公证处,为什么我们在网络上不能有一个呢?我们创建一个公证处,这个公证处给大家颁发一个正数来证明自己的身份,并且这里边还包括一个它的公钥,这样就能安全的获取了,但是这时候小黄又说,既然这样的话那你的证书应该怎么去传输呢?万一在传输过程中被篡改了怎么办?这简直就是一个鸡生蛋,蛋生鸡的问题。小蓝仔细想了想之后,又找到了一个解决办法,就是我们所说的数字证书。简单的来说就是把他们的身份信息和公钥通过哈希算法形成一个摘要,哈希算法有一个很好的特性就是,当输入的数据有一点点的变化,那生成的消息摘要可能就会有巨变,这样就在一定程度上防止了别人来修改我们的摘要。小黄说,确实修改一点会被你们看出来,但是说如果我把整个消息摘要都给你替换掉你怎么办?HTTP和HTTPS的区别

小蓝说那我也有办法,我们有一个认证中心CA,用它的私钥对信息摘要进行加密之后再生成一个签名,这样还不行生成签名之后,还会把数字签名和原始信息进行结合生成一个数字证书。

HTTP和HTTPS的区别

  这样当小蓝收到小红的证书的时候,就用同样的哈希算法来生成一个消息摘要,然后用CA公钥对数字证书进行解密,得到CA生成的消息摘要,这样两个进行一下对比,如果一样的话,就说明当前访问的信息没有问题。虽然很是复杂,但是只要能解决安全传输的问题就很好了。

HTTP和HTTPS的区别

不过关键的是一定要信任CA,并且通过安全的方式去获取他们的公钥才能正常的进行这一系列的循环。这些CA本身也有证书来证明自己的身份,并且CA的信用是像树一样分级的,高层的CA给底层的CA做信用背书,而操作系统/浏览器中会内置一些顶层的CA的证书,相当于你自动信任了他们。 这些顶层的CA证书一定得安全地放入操作系统/浏览器当中,否则世界大乱。

这样来说小蓝就是我们访问数据的浏览器,而小红就是我们的服务器。当我们用HTTPS来传输数据的时候。

HTTP和HTTPS的区别

HTTP和HTTPS的区别

这就是HTTPS的整个流程图。

总结来说HTTP和HTTPS主要有以下四点区别:

  1. HTTPS一般来说需要得到 CA的证书,并且这些证书常常是收费的

  2. HTTP的传输时明文的,而HTTPS是具有安全性的加密传输协议

  3. HTTP和HTTPS用的是完全不同的链接方式,用的端口也是不一样的HTTP用的是80端口,而后者用的是443

  4. HTTP的链接很简单,并且是无状态的,但是HTTPS是有SSL+HTTP协议构建进行的加密传输。

  但是HTTPS并非全是优点没有缺点

  1. HTTPS协议在握手阶段会耗费更长的时间和更多的CPU

  2. HTTPS连接缓存的时候不如HTTP高效,会增加数据的开销。

  3. SSL证书需要大量财力,功能越强大的整数费用越高,较难普及。

  4. SSL通常来说需要绑定IP,不能在同一个IP下绑定多个域名IPV4的资源不能支撑整个消耗

  5. HTTPS加密范围也是有限的,并且有些国家可以控制CA,所以来说HTTPS并不是完全可靠的传输方式也是存在被攻击的可能

如果说我们现在是HTTP传输协议我们怎么才能切换成HTTPS协议呢?

我们就需要把页面中的所有链接例如js,css,图片等等链接都由http改为https。例如:http://www.baidu.com改为https://www.baidu.com,并且大部分网站虽然支持了HTTPS但是都还继续支持HTTP协议,当我们在访问的时候去掉页面链接中的http头部,这样可以自动匹配http头和https头。例如:将http://www.baidu.com改为//www.baidu.com。然后当用户从http的入口进入访问页面时,页面就是http,如果用户是从https的入口进入访问页面,页面即使https的。