清晰图解深度分析HTTPS原理

Https现在基本已经覆盖所有的http请求了,作为一个伟大的发明,保障了我们的通信安全。在Android中对于HTTPS其实感知不多,因为这些内容都有成熟的框架帮我们完成了,例如okHttp。我们发起一个httphttps的请求几乎感受不到区别。

但最近在研究okHttp的源码的时候,发现很多的内容没看懂,最后发现是http相关的网络知识不扎实,再一次回过头来,把https学了一遍。正如前面所说,得益于框架,我们几乎不需要学习https背后到底发生了什么,但是发生了相关的bug也就无法修复(面试要问[狗头])。所以,作为一个android开发者,也还是很有必要学一下https。

HTTPS的目标就是解决网络通信的安全问题。本文首先阐述网络中存在的风险,然后再讨论其涉及的加密方法、证书验证,最后再同从请求的角度解析整个安全连接的流程。

网络存在的风险

在没有经过任何加密手段的HTTP通信中,面临着三大危险:消息监听、消息篡改、冒充身份

消息监听

我们发送的消息需要经过很多的中间路由器,我们无法确保网络中每一个节点都是安全的,所以我们发送的数据会被恶意的对象截取到。假如我们的消息没有经过任何加密,那么恶意用户就可以监听到我们通信的所有数据。如下图:

image.png

解决的方法是:对通信数据进行加密。如下图:

image.png

经过加密的数据,即时被黑客截取到,他也无法知道数据的内容。

消息篡改

第二个危险是消息篡改。我们发出的数据会经过危险的中间节点,黑客可以监听我们的数据,也可以对我们的数据进行修改。如下图:

image.png

解决篡改的方法是:利用MD5等hash算法手段来检验数据的完整性 。下面会详解。

冒充身份

HTTP并没验证身份的流程,我们无法保证我们接收到的数据是服务器响应的,服务器也无法鉴别请求的用户是否是恶意用户。如下图:

image.png

解决的方法是:使用证书来检验对方的身份

HTTP通信面临的这些问题,让我们的网络通信变得极其不安全,HTTPS就是在HTTP的基础上来解决安全问题。

加密算法

加密算法依旧是HTTPS安全通信中的重头戏。在理想的情况下,如若有一个加密算法使得仅有用户和服务可以加密解密,那么其实是不存在上面的安全问题的。但黑客本身,他也可以作为一个客户存在,普通客户可以加密解密,那么黑客也就可以做到。所以需要附加上动态因子来保证算法的安全。

这里解释一下什么是动态因子算法(这个名字我自己起的,仅仅为了帮助理解)

假如现在需要发送的数据是:123
算法是:数据+动态整数

现在通信双方商量的动态因子是:5,那么

发送方对数据进行加密:123+5=128

接收方对数据进行解密:128-5 =123

即使黑客知道具体的算法就是数据+动态整数,但是他不知道具体的动态整数是多少,也就无法解出原始的数据内容。这个动态整数称之为密钥

下面介绍HTTPS中用到的加密算法。

对称算法

对称算法比较简单:加密和解密数据使用相同的密钥 。如下图:

image.png

对称算法的优点就是效率很高,可以对长数据进行加解密。但对称算法也存在缺点。

第一是双方使用相同的密钥,无法辨别数据到底是由服务器加密还是客户端加密,也就是无法区分一个消息是由服务器发出还是由客户端发出。解决这个问题方法也很简单:双方加密使用不同的密钥

第二,通信双方难以确保拿到安全的密钥 。因为第一步总是需要通过网路通信来商量密钥,那可不可以使用固定的密钥?前面讲过,黑客也是一个客户,那么他也可以拿到密钥,这个算法就失去意义了。

解决这个问题的方法是:使用非对称算法

非对称算法

对称算法是加密解密使用相同的密钥,而非对称算法是加密与解密使用不同的密钥 。如下图:

image.png

非对称加密有两把密钥:公钥和私钥

公钥可公开给所有人,私钥必须自己保密,不给任何人拿到

客户端可以使用服务器的公钥加密数据,而这份密文,只有服务器的私钥才能解开

反过来,使用私钥加密的数据,也只有公钥可以解开

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgpsd.html