Skip to content
0

SSL

SSL 全称 Secure Sockets Layer,是用于在浏览器和服务器之间建立加密连接的协议。

TLS 全称 Transport Layer Security,是 SSL 的继任者,是 SSL 的升级版。

握手过程

HTTPS 保证安全的核心在于非对称加密的特点:公钥加密的密文,只能使用私钥解密。

因此,可以保证,客户端向服务端发送的第三随机数,只有服务端能够解密。

undefined
undefined

通过非对称加密得到对称加密的密钥,然后通过对称加密进行通信。利用两种加密方式各自的优势

中间人攻击

中间人攻击,就是攻击者截获了服务端的公钥,然后自己生成一个公钥和私钥,将公钥发送给客户端,私钥自己留着。

这样,攻击者即可以解密客户端发送的密文,又可以加密后冒充服务端发送给客户端。

undefined
undefined

问题就在于客户端如何确认收到的私钥是服务端的还是攻击者的?

为了解决这个问题,需要引入第三方来解决公钥的信任问题,这就是 CA 证书的由来。

CA 证书颁发

申请 CA 证书需要向 CA 机构提交公钥,以及网站相关的信息,CA 机构会生成一个私钥和公钥

CA 机构首先对这些信息以及公钥进行 Hash 运算,得到一个 Hash 值,然后将这个 Hash 值用 CA 机构刚刚生成的私钥加密,得到一个数字签名。

CA 证书的内容包含但不限于:

  • 网站信息
  • 公钥
  • 数字签名和原始的 Hash 值
undefined
undefined

CA 证书验证

CA 机构不只有一家,为了确保 CA 证书的权威性,需要有其他 CA 机构来负责验证其他 CA 机构的证书,就有一层层验证套娃,这被称为证书链

下面是当前网站(https://dev.peterroe.me)的证书链校验过程,浏览器会逐级向上校验每个证书的数字签名,直到根 CA 为止

根 CA 通常在操作系统中内置

例如当前我可以在系统的找到这个根证书:

具体的校验过程:

undefined
undefined

如果 CA 证书的网站内容被篡改,那么数字签名将无法通过验证。

由于数字签名是使用 CA 机构的私钥加密的,只有 CA 机构的公钥才能解密,中间人无法既篡改网站内容,又伪造数字签名,所以会导致 CA 公钥解密出来的哈希值一定前后不一致

TIP

核心原因:虽然可以篡改内容,但是无法得到篡改后内容生成的数字签名(这需要生成 CA 证书时的私钥)

参考资料

来自:BV1mj421d7VE

Released under the MIT License.