为什么要用HTTPS?
前言
- HTTP作为
超文本传输协议
,应用领域十分广泛。但在互联网中是明文传输,有诸多风险,那到底为什么不安全呢?
HTTP的不安全
- 熟悉网络的读者都知道,比如数据传输时,通常直连的,而是走一层层路由。
- 例如我要访问
www.grapecity.com
,查看下路由器的路由过程(Windows命令tracert www.grapecity.com
)。如下图所示。
- 每个路由一层层传递,在每个路由节点中都可以看到我们的数据。如果这时候出了一个不怀好意的人,把数据给拦截了,他还能把数据给改了;在中间当搅屎棍,伪造消息发给服务端或者客户端。这就叫
中间人
。如下图所示。
中间人举个例子(只是举个例子,并没有黑某个职业的意思):
像我们写信的时候要把信寄出,邮递员可以把寄出的信拆开看,还可以把信的内容篡改调掉;朋友回信时,邮递员也可以查看到信的内容,想要篡改内容也可以。
数据加密
- 因为数据是明文传输,那么把数据加密能否解决呢?我们来试想下。
对称加密
- 客户端和服务器端共同持有一个密钥。这个方案最大的问题是密钥可能泄露。
- 如果密钥写在客户端代码,总能在客户端找到蛛丝马迹的。
- 如果是由服务器端把密钥下发到客户端,网络传输过程中有可能被中间人劫持获取到。
非对称加密
- 客户端持有公钥,服务端持有私钥,公钥加密私钥解密,私钥加密公钥解密。
- 如果公钥写在客户端代码上,公钥会泄露。这样中间人虽然不能解密客户端发送的消息,但可以把自己的消息给服务器(篡改),服务器端的返回也能用公钥解密。
- 如果公钥是服务器端下发给客户端。客户端请求下发公钥时,中间人可以冒充客户端请求服务器,服务器返回公钥,中间人得到服务器的返回,把自己的公钥给客户端。以后客户端使用的公钥是中间人给的 ,一旦客户端传输数据,中间人能看到。服务器返回数据,因为中间人持有之前服务器返回的公钥,所以也能看到服务器的返回数据。
CA证书
- 那么CA证书如何解决中间人的问题呢?
- CA是可信任的第三方机构。
- 首先CA证书是不在网络中传递的,也不会在我们的业务代码中。我们会操作系统内置一些,另外也可以手动安装,使用
certmgr.msc
可以查看,如下图所示。
- 这时中间人是无法篡改数据的,因为会使用到操作系统内置的证书。除非你的操作系统不安全。
小结
HTTPS
就是HTTP + SSL
,SSL
是CA证书
的一种。CA证书操作系统内置规避了很多问题,是21世纪非常伟大的发明。- 以上就是我对为什么要用HTTPS的理解,如有不当之处,恳请指出,感激不尽。