一、前言
现在如果你想要自己建一个网站,那么我相信你不可避免的会接触到https协议。
https协议和http协议的作用其实是一样的,用于客户端与浏览器中间收发数据。
唯一的区别在于https
比http
多了一个s
,也就是安全层(secure)。
不理解http协议的可以参考文章:手写一个WebServer;
二、http缺陷
从http的原理我们可以明白这么一个事实:客户端与服务器之间是直接通过套接字收发数据的。
同时一个ip地址发送到另一个ip地址,一般其中间都会经过许多中继点。
不理解的可以参考文章:网络编程详解。
比如身处四川的你在电脑上发送一条数据给北京的某个服务器,你发生的数据可能就会经由你家的路由器、然后是中间无数的网络节点、最终到达北京的服务器。
此时只要有人在这条线路之间进行网络数据监视,便能够轻松获得你发送给服务器的数据。
graph LR
A[A]-- 数据-->B[B]
B[B]-- 数据-->C[C]
比如上图中A想要发送给C数据,很多时候就不得不经由B去转发,那么B自然能够轻易获取到A发送给C的数据了。
这便是http问题之一的数据泄露,一旦其中包含一些隐秘的数据,甚至可能造成资金损失。
然后再试想一下,虽然A确实将数据往C发了,但中间的B完全可以不继续转发,而是直接给你返回一个伪造的数据:
graph LR
A[A]-- 数据-->B[B]
B[B]-- 返回伪造数据-->A[A]
B[B]--X-->C[C]
这便是网络劫持,早期的互联网因为大量使用的http协议,就导致了相当多的网站被黑客劫持。
比如你明明输入的是QQ官方网址,可访问进去一看却是黄赌毒之类的网页,这种情况一般就是该网站被劫持了。
三、https原理
为了解决上面两个、以及更多的问题,http协议就引入了一个安全层(Secure)。
换句话来说,就相当于这个等式:https=http+SSL/TLS