上篇文章中我们讲到HTTP协议,由于HTTP协议是通过明文来传输数据的,也就是说,通过HTTP发送的数据,被别人劫持后是可以直接看到数据内容的,这样是相当不安全的。想一下,你通过HTTP协议在网上购物,在你将商品加入购物车以及付款的过程中,中间人是可以通过劫持你的数据而直接获取你的账号和密码的(包括你的银行卡账号和密码),这是相当不安全的。因此,针对HTTP协议明文传输的特点,推出了HTTPS协议。

HTTP vs HTTPS

HTTPS协议与HTTP协议相比,在名字上相比是多了一个S,这个S实际上指的就是SSL/TLS,也就是说 HTTPS=HTTP+SSL/TLS。这个SSL/TLS就起到了信息加密的作用。
HTTPS协议对应的服务器端口号是443,HTTP协议对应的端口号是80,除以上两点外,HTTPS与HTTP没有大的区别。所以我们这篇文章重点讲述SSL/TLS。

SSL/TLS

一般情况下,如果通信过程具备了四个特性,就可以认为是“安全”的,这四个特性是:机密性、完整性,身份认证和不可否认。我们接下来就来看一看SSL/TLS协议是如何解决这四个问题的。

机密性

机密性,就是说信息是加密的,别人即使获取到信息,也无法直接看到信息内容。

实现机密性的方式就是加密。加密算法分为两种,对称加密和非对称加密。

对称加密

对称加密就是加密的**和解密的**是同一个。只有通信双方知道**,其他人不知道,那么这种方式就是安全的。在TLS里常用的加密算法有AES和ChaCha20。
AES全称是高级加密标准(Advanced Encryption Standard),**长度可以是 128、192 或 256,是目前较为常用的加密算法。ChaCha20 是 Google 设计的一种加密算法,**长度固定为 256 位,纯软件运行性能要超过 AES,曾经在移动客户端上比较流行。由于硬件对AES算法的优化,使得AES算法成为目前最常用的对称加密算法。
计算机网络之HTTPS协议
在对称加密算法中还有一个“分组加密”的概念,“分组加密”是指将明文按照一定长度进行分组,然后分组进行加密。 ECB、CBC、CFB、OFB 等是早期的分组加密算法,现在已经不怎么用了。目前常用的是GCM、CCM 和 Poly1305。

非对称加密

由于对称加密算法存在**安全传递的问题(如果明文传输**,被截获后**就失去了它的作用,如果要加密传输的话,对它进行加密的**的传输又成了问题。。。。),因此就发明了非对称加密算法。
非对称加密算法有两种**:公钥和私钥。公钥加密,私钥解密或者私钥加密,公钥解密。通过这种非对称加密算法,解决了**传输的问题(一个电子商务网站保存好自己的私钥,而把公钥分发给大家,即使黑客知道公钥,也无法**大家用公钥发送的消息)。
非对称加密算法虽然不存在**安全传输问题,但是其计算量要比对称**大的多。如果网络上全使用非对称加***,那网络基本无法正常运行。
后来,人们想到了混合加密方法,先使用非对称加密算法传递对称加密的**,待传输完成后,全部使用对称加密算法。这样,就完美地兼顾了网络安全与网络延迟问题。

完整性

完整性是安全通信的四个特性中的第二个。完整性,保证消息在传输过程中不会被恶意篡改,或者即使被篡改,也能够被我们发觉。
我们常用的实现完整性的手段是摘要算法,也就是我们常说的散列函数、哈希函数。
摘要算法能够将任意长度的数据转变为一个固定长度的字符串,数据不同,生成的字符串必不相同,而且,无法由生成的字符串反推原数据。目前常用的摘要算法是MD5、SHA-1以及SHA-2。
将摘要算法生成的字符串附在要发送的数据后面,接收者收到数据后,使用相同的摘要算法对收到的数据进行计算,将得到的字符串与收到的字符串进行比较即可知道收到的数据有没有经过篡改。

身份认证与不可否认

身份认证是指我们能够确认消息的发送者,不可否认是指消息发出后,消息的发送者不可否认是自己发送的,我们通过数字签名技术可以同时实现这两种特性。
相比于机密性和完整性的算法,数字签名技术可以说是我们最“常见”的,因为,我们有时在下载软件时,为防止下载到由黑客制作的钓鱼软件,我们会查看软件的数字签名证书,确保这个软件是官方发行的。
那么我们是怎么实现数字签名的呢?其实就是借助前两种方法中的私钥和摘要技术:通过摘要算法得到发送数据的全文摘要,然后用私钥对这个摘要部分进行加密。接收者用对应的公钥进行解密,由于私钥只存在于发送者手中,因此即可实现身份认证与不可否认双重特性。

相关文章: