一、为什么会出现 HTTPS

1.1 HTTPS 的前身

想要了解为什么会出现 HTTPS,我们必须得先清楚 HTTPS 的前身:HTTP

当我们在浏览器中输入 URL 地址访问某个网站时,浏览器会向服务端发送一系列请求,服务端在接收到这些请求后会根据这些请求做出相应的处理,并将处理后的结果传回给浏览器,浏览器在接收到数据后经过一系列的操作,最终以 web 页面形式在浏览器中渲染出来,即我们所看到的网站页面。

在整个过程中,发送请求的浏览器被称为:客户端。处理请求的服务器被称为:服务端

这些在客户端和服务端之间传递的数据并不是杂乱无章的,而是遵循着一定的规则和标准。

例如:

  • 客户端以何种请求方法:GET、POST、PUT、DELETE

  • 客户端发送的请求中应该包含哪些信息,以及这些信息以何种方式进行传输

  • 服务端处理完请求后返回给客户端的状态码信息。

而这一系列规则和标准便是超文本传输协议(Hyper Text Transfer Protocol),也就是我们常说的 HTTP 协议。

世界上绝大多数的 Web 服务都是基于 HTTP 协议的,可以说,HTTP 协议是现代互联网发展的基石,它在整个互联网的发展中起着举足轻重的地位。

接下来我们来看看 HTTP 的传输流程。

1.2 HTTP 的传输流程

A859EF19-046E-43B5-8ABB-415854278933.png

我们这里先了解一下 HTTP 协议数据的传输流程。

  1. 首先数据从应用层发出并携带对应的 HTTP 请求头

  2. 然后经过传输层处理再一层层往下传递封装,最终封装成数据帧。

  3. 封装后的数据报文在网络中来回奔波最终找到目标服务器

  4. 目标服务器接收数据报文逐层解封,最终得到数据

1.3 HTTP 的裸露风险

但就是这样一个作为基石的协议却存在一些令人发狂的缺陷,其中最令人诟病的就是它的安全性问题。所有基于 HTTP 协议传输的数据在互联网中全都是以明文形式传播的(仿佛一个人赤身裸露在大街上,所有东西一览无遗。这也意味着,无论是谁都可以随意的窃取、监听、篡改网络中的 HTTP 数据。

下面两幅图非常直观的展现了的 HTTP 在网络传输中所存在的安全缺陷。

缺陷一:在网络传输过程中,用户的隐私数据容易被窃取

19029064-0580-4757-B7F2-79892F367134.png

缺陷二:在网络传输过程中,通信双发之间的信息容易被监听和篡改

7D5D8B72-165F-4BB2-81EC-0345E32BA335.png

正是上述 HTTP 存在的安全性问题,人们引入了 HTTPS 协议,其中的 S 就代表了 Secure 即安全。

那么 HTTPS 是如何保证数据传输过程中数据的安全性呢?

答案是:加密。

二、TLS & 会话加密(对称加密)

在 HTTPS 中对上述的 HTTP 数据传输过程进行了改进,在应用层和运输层之间添加一层 TLS 层,用于数据加密。

630D37BF-C294-4E37-BF19-070C627A98D5.png

那么,什么是 TLS,它有什么用?

TLS 是专门用于对数据进行加密和解密操作的,当客户端产生数据后,数据在经过应用层和传输层时还会经过一层 TLS 加密层,加密后的数据再经由下层结构,发送到网络中到达最终服务器。数据在经过 TLS 层后,在会对数据进行解密。由于此时在网络中数据都是经过加密后的数据,所以即使黑客窃取了数据,也是加密后数据。

那么什么是 TLS 协议呢?它又是如何实现数据加密和解密操作的呢?

TLS(Transport Layer Security):传输加密协议,规定了如何为网络中传输的数据进行加密和解密。

这里也许有小伙伴会疑惑,SSL 是什么?它和 TLS是什么关系呢?

这里我们来拓展一下,SSL(Secure Socket Layer)是 TLS 的前身是早期的加密协议,后贡献给 IETF 组织,并最终重名为 TLS,我们可以直接将 SSL 看做 TLS 或者将二者对等

这里在来扩充一个问题,TLS 只有 HTTPS 使用吗?

其实如果我们知道了 TLS 所处在网络体系结构中的位置的话,这个问题就很好解答。TLS 加密层介于应用层和传输层之间,TLS 可以被应用于任何基于 TCP/IP 协议的上层协议或者应用程序,如 SFTP 协议,SMTP 协议,数据库间的加密通信等等。

那么 TLS 又是以何种方式对数据进行加密和解密的呢?

答案是对称加密(Symmetric Encryption)。所谓对称加密是指通讯双方根据协商好的算法生成一个唯一秘钥,该秘钥将同时用于对数据进行加密和解密操作。

B96F70B5-7A19-4F94-AF48-E38400076840.png

但是我们再来思考一个问题:上述过程真的能确保数据传输的安全吗?

答案是否定的。虽然上述使用了对称加密的方式实现了数据的加密,黑客在窃取数据时窃取到的是加密后的数据,但仍然有办法破解。

在使用对称加密加密之前,客户端需要将生成的预主密钥(一串随机字符串)传送给服务端,黑客完全可以截获秘钥发送的这段数据报文,解密出其中的预主密钥和加密算法,后续通过该预主密钥解密被加密的数据,仍然可以达到对应的目的。

074F10A5-65F5-401A-B25C-30F5157AE4A5.png

三、PKI 非对称加密

为了解决上述对称加密存在的安全性问题,我们引入了非对称加密(Asymmetric Encryption)与对称加密不同的是,非对称加密包含两个不同的密钥文件:公钥私钥

公钥:公钥对外公开,用于加密,任何人都可以随意获取

私钥:私钥保密,只有拥有者自己知道

这种公私秘钥的加密方式也被称为 PKI(Public Key Infrastructure)


非对称解密是如何解决预主密钥被截获的问题的?

08EC2E51-8EC5-425A-85AC-9BA6B4FD6BC8.png

非对称加密是在服务端返回【TLS 版本+加密算法】的同时还会将公钥返回给客户端,客户端使用公钥加密预主密钥。将加密好后的预主密钥返回给服务端,服务端通过自己的私钥解密出预主密钥。最终实现了预主密钥的保护。

我们继续思考,这种方式虽然保护了预主密钥不被破解,但真的万无一失了吗?

不知道大家是否看过碟中谍,里面有一种换脸的操作,不到最后一刻你永远不知道你面对的究竟是谁。同理,虽然我无法破解你们之间的预主密钥,但是我可以伪装成服务端,这时阁下又该如何应对?

031DC067-DFA2-400E-84B6-E306A491C123.png

四、CA 证书

为了应对上述黑客伪装成客户端的问题,我们引入了证书。我们使用证书来代替服务端的公钥来验证服务端的真实性。

那么什么是证书呢?它又是如何解决上述问题的呢?

数字证书(Digital Certification)

  • 由证书颁发机构 Certificate Authority(简称 CA)所签发

  • 唯一标识一个站点的身份信息

4.1 证书查看

因为证书用于证实网站的真实性和有效性,任何人都可以查看网站的证书信息,这里我们以 github 的证书为例

4.2 证书申请

首先证书是由专门的证书签发机构 CA 所签发(CA 是全球性的权威组织结构,我们可以完全信任)。

首先申请者需要创建一个证书申请请求,申请请求文件 CSR(Certificate Singing Request)

CSR 文件构成:

  • 网站域名(domain)

  • IP 地址

  • 公司名称

  • 地理位置

  • 邮箱地址

  • 网站的公钥

将 CSR 准备好后,将 CSR 发送给 CA 机构,CA 会根据其中的信息对站以及公钥进行核实,一旦核实通过,CA 机构会为该站点签发一个证书并返回给申请者。

申请者接收到 CA 证书后部署到 Web 服务中即可。

4.3 证书的工作原理

证书是如何唯一标识网站身份的?客户端在接收到证书后又是如何验证其身份的?

证书指纹:用于唯一标识一个证书(确保证书的完整性)

  • hash 加密:单项加密算法

    • 不可逆性:无法对一个散列值做逆向操作来获取原始数据

    • 唯一性:不同的数据其计算得出的散列值永远不同,而同一输入计算出的散列值永远一样

数字签名:用于验证证书身份的真实性(确保证书确实由 CA 机构颁发)

  • 利用 PKI 进行加密和解密操作,来验证证书真伪

    • CA 使用私钥加密,公钥解密

但是这里又有一个问题我们如何确保 CA 的公钥的真实性,如何避免 CA 的公钥不被黑客掉包呢?

答案是:预安装。其实 CA 机构在对证书进行数字签名时不仅会用到私钥,还会用到另一个证书文件:根证书。根证书最主要的作用就是为其他证书签名,而 CA 的公钥也被附加到 CA 的根证书中,每个操作系统都会维护一个根证书库,并默认安装好了全球各地受信任的 CA 根证书,因此要验证证书的真实性时直接从系统根证书中找到 CA 的根证书即可,这样就避免了网络传输时可能会遭遇窃听甚至掉包的风险。

五、总结

至此,我们最终实现了数据传输的安全性。我们经历过以下三个阶段:

阶段一:对称加密阶段

  • 作用:采用会话秘钥对传输的数据进行加密,避免 HTTP 在网络传输中的明文问题

  • 缺陷:用于生成会话秘钥的预主密钥会被窃取

阶段二:非对称加密阶段

  • 作用:使用公钥加密预主密钥,使用私钥解密预主密钥,防止预主密钥被窃取

  • 缺陷:黑客可以伪造服务端蒙骗客户端

阶段三:CA 证书阶段

  • 作用:采用 CA 证书保护公钥,确保公钥的真实性,防止黑客伪造公钥

  • 原理:使用系统根证书确保 CA 证书的完整性防止被黑客伪造

  • 缺陷:如果系统被黑客侵入,黑客可以将自己的根证书嵌入到系统中,然后伪造 CA 证书,同样可以破解网络通信

EB3627D3-2392-4A13-A889-8DD1F7BA8BD4.png