成哥在Wireshark系列实战案例中,分析过多种网络问题,但唯独没有涉及到应用层HTTPS协议的相关内容。
今天通过wireshark捕获HTTPS数据包,来给大家讲解一下HTTPS的加解密过程。
我们先从HTTP协议说起。
HTTP协议(超文本传输协议)是一种客户端与Web服务器之间进行应用层通信的协议,主要用于WWW服务。
客户端和web服务器端的之间通信为明文传输,数据直接交互,不存在任何安全性。如下图所示:
通过捕获HTTP的数据包,可以看到HTTP会话中的Cookie和各种id信息。如下图所示:
HTTP虽然优点众多,但是其明文传输的缺点,就足以致命。从2017年开始,Chrome 浏览器已把采用 HTTP 协议的网站标记为不安全网站,后续基本所有浏览器厂商都做了相同的标记。
HTTP协议的不安全问题,催生了HTTPS协议的产生。
为了增强HTTP协议的安全性,网景公司设计出了能够对HTTP协议进行安全加密的传输方法,即在TCP/IP协议的传输层和应用层之间新增了一层安全套接层。并将SSL和HTTP协议相结合,以实现安全的HTTP数据传输。这就是HTTPS协议,即"HTTP over SSL"或者"HTTP Secure"。
早期SSL是HTTPS使用的标准协议,之后IETF在SSL 3.0的基础之SSL进行标准化。形成传输层安全,即TLS。但它们本质上是相同的,我们可以合称TLS/SSL。
HTTP和HTTPS的区别如下图所示:
从图中可以看出,HTTP协议和HTTPS协议主要的差别就是是否存在TLS/SSL层。即HTTPS协议= HTTP协议+SSL/TLS协议,在HTTPS数据传输的过程中,需要用SSL/TLS对数据进行加密和解密,然后使用HTTP对加密后的数据进行传输。
在介绍HTTPS协议的加解密过程前,先要学一些密码学的知识。
(1)几个基本概念
明文:指的是未经过加密的原始数据。
密文:通过对明文进行加密操作后得到的数据。
密钥:一种参数,通过在加解密算法中使用该参数,可对明文进行加密,或者对密文进行解密。同时,密钥分为对称密钥与非对称密钥两种,分别应用在对称密钥算法和非对称密钥算上。
(2)对称密钥算法
使用相同密钥和算法进行加解密运算的算法叫做对称密钥算法。示意图如下所示:
对称加密的特点是算法公开、加密和解密速度快,适合于对大数据量进行加密。
常见的对称加密算法有DES、3DES、TDEA、Blowfish、RC5和IDEA。
(3)非对称密钥算法
非对称密钥算法对比对称密钥算法,其安全性更好。
使用对称密钥算法通信的双方使用的是相同的密钥,如果一方的密钥遭泄露,那么整个通信就会被破解。而非对称密钥算法的双方两个不同的密钥,即公钥和私钥,且二者成对出现。示意图如下:
私钥被自己保存,不能对外泄露。公钥指的是公共的密钥,任何人都可以获得该密钥。用公钥或私钥中的任何一个进行加密,用另一个进行解密。
非对称密钥算法的主流协议是RSA,需要给每个参与者产生一对密钥。共享私钥到服务器,严格保障私钥的安全性。
(4)SSL加解密解决方案
SSL加解密过程中同时使用到对称密钥和非对称密钥。如下图所示。
加密过程:重要文件使用对称密钥加密(速度快,长度不增加),形成加密文件。然后使用接收方的公钥将对称密钥加密,保证对称密钥传输时的安全性。然后将加密文件和加密的对称密钥发送给接收方。
解密过程:接收方通过私钥将对称密钥解密,获得对称密钥,然后对加密文件进行解密,获取重要文件。
成哥前文说,HTTPS协议= HTTP协议+SSL/TLS协议。HTTP协议传输过程较为简单,这里不做介绍。我们来看看SSL/TLS协议的加解密过程。
在浏览器访问腾讯网,通过wireshark软件捕获到的SSL/TLS数据包如下,可以看到完整的SSL/TLS加密通信过程,如下图所示:
对捕获到的报文进行整理,形成以下流程图:
(1)客户端首先向目标网站发送HTTPS请求,即Client Hello。
该数据包中给出了浏览器的TLS版本号、随机数、支持的加密算法等信息。如下图所示:
(2)服务器端进行应答,即Server Hello。
该数据包中给出了服务器使用的TLS版本、随机数、确认双方加密方法等信息。如下图所示:
(3)服务器端给出数字证书和公钥,即Certificate、Server Key Exchange
该数据包中给出了数字证书以及服务器公钥,如下图所示:
这里要特别说一下客户端到底 如何来校验对方发过来的数字证书是否有效的?
我们从抓包中看到,服务器端将服务器证书、中级证书、CA证书等一并发送客户端。如下图所示:
(4)客户端根据客户端的公钥,计算出另一个公钥,发送回服务器端,即Client Key Exchange、Change Cipher Spec、Encrypted Handshake Message。
证书校验成功之后,客户端会生成一个随机串然后使用服务器证书的公钥进行加密之后发送给服务器。
(5)服务器开启New Session Ticket.
服务器通过使用自己的私钥解密得到这个随机值。开始使用这个随机值进行对称加密开始和客户端进行通信。如下图所示:
成哥今天主要给大家讲解了HTTPS协议的处理过程,重点是介绍HTTPS和wireshark捕获数据包,所以这里没对密码学的知识做过多的介绍。之后有机会给大家补上。