[网络]——图解HTTPS

HTTPS协议

之前我们一直在聊超文本传输协议HTTP,HTTP虽然使用广泛但也存在一定的安全性问题。今天我们要谈的HTTPS协议,别看他只比HTTP多一个S。然而正是这个S,让我们在网络上请求资源时变得更加安全。

HTTP的缺点

这里HTTP的安全性问题,笔者用简洁的语言概括为以下三条:
[网络]——图解HTTPS
值得强调的是,这里我们说的HTTP的问题只涉及安全性问题,其实HTTP还存在其他功能方面的缺陷。并且,对于使用HTTP协议的安全性问题也并不是把所有锅都甩给协议本身,因为在进行web编程时,程序员所写的程序出现的bug也会导致通信的不安全。

什么是HTTPS

既然HTTP存在我们上面所讲的三个缺点,那么也就意味着只要修复了这三个缺点便能使HTTP变得更安全。既然使用明文不安全,那我们就对报文进行加密,又既然不验证身份就会遭遇伪装,那么我们进行认证就完事了。只要完成了加密和认证,也就意味着我们此时在传输报文时就安全了,报文完整性的问题也就能得到解决。所以记住下面的一条公式你也就初步理解了HTTPS
[网络]——图解HTTPS
HTTPS不是一种新协议,HTTPS不是一种新协议,HTTPS不是一种新协议,重要的事情说三遍。HTTPS只是在HTTP的基础上增加了我们上面所说的一些机制,我们的问题其实就转化为了这些机制是怎么实现的。

HTTPS是身穿SSL外壳的HTTP

让HTTP升级为HTTPS是使用了一种SSL的技术,来看看官方是怎么解释的:

SSL(Secure Sockets Layer 安全套接层)协议,及其继任者TLS(Transport Layer Security传输层安全)协议,是为网络通信提供安全及数据完整性的一种安全协议。

从描述种可以看出,SSL其实也是一种协议,它能够对HTTP数据报进行再一次的处理。换句话说,HTTP协议将自己的数据交付给SSL协议,而上面提到的加密和认证也就是在这一层完成的。所以现在我们使用HTTP通信时的通信模型就变成了下图这样
[网络]——图解HTTPS
所以上面之所以反复强调HTTPS不是新协议就是因为,此时只是HTTP通信接口部分使用了SSL协议。更直白的说,现在HTTP进行通信时先与SSL通信,才和TCP通信。

SSL是独立于HTTP的协议,所以不光是HTTP在使用他,比如SMTP和Telnet等协议也都使用了SSL。可以说SSL是当前世界上应用非常广泛的安全技术了。有的小伙伴在书中会看到TLS技术,其实TLS是SSL3.0以后出现比SSL更完善的协议,可以说他是SSL的继承者,但是他们从本质上要做的事情是基本相同的。

HTTPS实现安全通信的原理

直入主题的直接讲解实现原理并不是很好理解,所以这里我们要先提一些关于加密的知识,没有了解过也不用担心,非常简单的道理,一说你就会懂。

那么要做到HTTP报文安全的通信其实不难理解,我们只要对报文进行加密就行了,所以这里我们可以使用对称加密的方式:对称加密是说通信双方先约定一种加密的方式,并且约定随机生成一个密匙。通信过程中发送方使用密匙加密,而接收方使用密匙解密
[网络]——图解HTTPS
之后我们的通信的报文都是经过加密的,但是这样做就安全了么?肯定不是,不然笔者的博客就全剧终了。如果在第一次交换密匙时就被中间人截获到了密匙,那么其实对称加密是毫无意义的
[网络]——图解HTTPS
所以这里我们又要提到第二种加密的方式,非对称加密:这种加密方式有一把公匙,一把私匙,对于数据既可以公匙加密私匙解密,也可以公匙解密私匙加密。所以通信时,其中一方保留好私匙,公匙发送给对方即可。然而奈何非对称加密算法处理效率低,所以整个通信若都使用非对称加密会使效率变得极低。

HTTPS使用了对称和非对称加密的混合使用,做法是使用非对称加密来传输之后用来通信的公匙,这里好好体会下这句话。
[网络]——图解HTTPS
然而看起来完美无缺的做法依旧会被中间者抓住漏洞盗取信息:
[网络]——图解HTTPS
就如下图,此时中间者拿到了对称密匙,所以上面所做的操作也就白干了
[网络]——图解HTTPS
显然这样对密匙的一而再,再而三的加密是解决不了问题的,所以为了解决这个棘手的问题,我们就要借助权威的第三方证书颁发机构,什么是证书呢?

证书是权威的第三方机构发布的,此机构中也有一对非对称密匙,机构通过自己的密匙和服务端的信息生成一个证书签名,这个签名也使用密匙加密,并且将服务端公匙使用机构密匙加密,然后返回给服务端
[网络]——图解HTTPS
服务端拿到证书后核实信息,确定没有被中间者篡改过,再次通信时,服务端给发送端直接将证书发送过去。此时客户端拿到证书后使用存放在浏览器的公匙解密签名和公匙(各大浏览器和操作系统已经维护了所有的权威机构的名称和公匙),接下来客户端使用存放在证书中的签名规则(图中没画出),自己生成一个证书签名,如果俩个签名是一致的,说明证书有效,既可以使用服务端的公匙进行对称密匙的传输

[网络]——图解HTTPS
设想,此时中间者能不能截获证书使坏呢,如下图所示,虽然中间者此时也可以使用放在浏览器的机构公匙解密证书,可是由于没有机构的私匙无法完成加密,所以篡改证书也就无法实现了
[网络]——图解HTTPS
这里很多小伙伴最大的困惑就是中间者截获问题,其实很简单,中间者确实此时可以解密,但是他已经无法完成加密。还有一部分同学的问题是万一服务器在申请证书时就被截获怎么办,其实不用担心,服务端在拿到证书时也是会自己验证的。

这里需要清楚的是,此漫画中服务器和客户端是公匙加密私匙解密,机构则是公匙解密私匙加密。

HTTPS如果建立通信机制

文字磨人,直接上图了。步骤可能有点多,但并不难理解:
[网络]——图解HTTPS

HTTPS是否存在缺点

其实与其说HTTPS的缺点不如说HTTP加上SSL的缺点,SSL是为了让HTTP更安全而强行添加的一层协议,所以不难理解一定会导致处理的速度变慢

SSL在加密和解密中占用大量CPU和内存资源,并且在通信中还要占用部分网络资源,所以一定会导致处理速度变慢。和HTTP相比,使用HTTPS会使网络负载变慢2~100倍。然而针对变慢这一问题没有根本的解决方案,家里有矿无限怼硬件除外。。。

总结

本文章笔者参考了程序员小灰和图解HTTP等书,感觉受益匪浅,有兴趣的小伙伴也可以找来看看。如果文中有什么错误只管指出,共同进步。